使用Redis保存用户会话Session详解


使用Redis保存用户会话Session详解

前言

PHP内置的绘画存储机制是把全部的会话数据保存在服务器上的文本文件里面,这些文件通常都是保存在服务器上的临时目录里。如果并发量大,读写效率非常低。而Redis对高并发的支持非常好,所以,可以使用redis替代文件存储session。

相关专题推荐:php session (包含图文、视频、案例)

session_set_s*e_handler函数

PHP的session_set_s*e_handler函数用来定义用户级session保存函数(如打开、关闭、写入等)。原型如下:

bool session_set_s*e_hanler(callback open,callback close,callback read,callback write,callback destory,callback gc)

参数 描述
open 当session打开时调用此函数。接收两个参数,第一个参数是保持session的路径,第二个参数是session的名字。此回调函数操作成功返回 TRUE,反之返回 FALSE。
close 当session操作完成时调用此函数。不接收参数。此回调函数操作成功返回 TRUE,反之返回 FALSE。
read 以session ID作为参数。通过session ID从数据存储方中取得数据,并返回此数据。如果数据为空,可以返回一个空字符串。此函数在调用session_start 前被触发
write 当数据存储时调用。有两个参数,一个是session ID,另外一个是session的数据
destroy 当调用session_destroy 函数时触发destroy函数。只有一个参数 session ID,此回调函数操作成功返回 TRUE,反之返回 FALSE。
gc 当php执行session垃圾回收机制时触发,此回调函数操作成功返回 TRUE,反之返回 FALSE。

Session管理类

找到PHP的配置文件php.ini,修改为下面内容,保存并重启php-fpm服务。

session.s*e_handler = redis

我们编写一个用来管理session的类:

<?php 
class SessionManager{

 private $redis;
 private $sessionS*ePath;
 private $sessionName;
 private $sessionExpireTime = 60;//redis,session的过期时间为30s

 public function __construct(){
 $this->redis = new Redis();//创建phpredis实例
 $this->redis->connect('127.0.0.1', 6379);//连接redis
 //$this->redis->auth("123456x");//授权
 $retval = session_set_s*e_handler(
 array($this,"open"),
 array($this,"close"),
 array($this,"read"),
 array($this,"write"),
 array($this,"destroy"),
 array($this,"gc")
 );
 session_start();
 }

 public function open($path,$name){
 return true;
 }

 public function close(){
 return true;
 }

 public function read($id){
 $value = $this->redis->get($id);//获取redis中的指定记录
 if($value){
 return $value;
 }else{
 return '';
 }
 }

 public function write($id,$data){
 if($this->redis->set($id,$data)){//以session ID为键,存储
 $this->redis->expire($id,$this->sessionExpireTime);//设置redis中数据的过期时间,即session的过期时间
 return true;
 }

 return false;
 }

 public function destroy($id){
 if($this->redis->delete($id)){//删除redis中的指定记录
 return true;
 }
 return false;
 }

 public function gc($maxlifetime){
 return true;
 }

 public function __destruct(){
 session_write_close();
 }
}

SessionManager构造函数主要用来连接Redis服务器,使用session_set_s*e_handler函数设置session回调函数,并调用session_start函数开启session功能。因为本例中open、close和gc回调函数的作用不是很大,所以直接返回true。

企业在线记账管理系统 v4.02 build20160930免费版 企业在线记账管理系统 v4.02 build20160930免费版

企业在线记账管理系统是一款功能强大,特别简单易用的财务在线记账软件,它不需要用户了解深奥的财务知识,不用培训即会使用,特别适合中小企业,门店等用在日常经营管理中来管理现金流水账,应收应付帐,以及公司记账等相关财务活动。 环保时代企业在线记账管理系统也可以说是一款傻瓜型的流水账管理系统,通过记录每日现金支出,收入的明细账,为企业管理者提供详细的收入支出日报,月报,欠款明细等重要信息。是您进行企业管

企业在线记账管理系统 v4.02 build20160930免费版 773 查看详情 企业在线记账管理系统 v4.02 build20160930免费版

在write回调函数中,以session ID 作为key,把session的数据作为value存储到redis服务器,设置session的过期时间为30秒。在read 回调函中,以session ID 作为key从redis服务器中读取数据,并返回此数据。而在destroy回调函数重,则以session ID 作为key 从redis服务器中删除对应的session数据。

使用Session

先建立一个set.php文件,用来设置Session:

<?php 
require_once 'SessionManager.php';
new SessionManager();
$_SESSION['username'] = 'helloweba';

然后建立get.php文件,用来获取Session:

<?php 
require_once 'SessionManager.php';
new SessionManager();
echo $_SESSION['username'];

很显然,我们先包含session管理类,然后实例化后就可以使用PHP正常的session函数了。

测试时,首先访问set.php,然后再访问get.php,输出结果如下所示:

最后,我们到redis里查看结果:

相关学习推荐:redis视频教程

以上就是使用Redis保存用户会话Session详解的详细内容,更多请关注其它相关文章!


# 器上  # 黄页网站与推广效  # 盐城网站建设哪一家便宜  # 咸阳seo优化加盟  # 凌海网络营销推广服务  # 七里河区网站建设推广  # 网站优化技术有哪些方法  # 辽阳网站建设模板选哪家  # 竞彩足球优化网站推荐  # 滁州网站建设优化建站  # 引流推广怎么做好营销策划  # Redis  # 器中  # 是一款  # 数据存储  # 管理类  # 如何实现  # 网络带宽  # 时间为  # 管理系统  # 回调  # Session 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: J*aScript中高效处理用户输入:从Keyup事件到表单提交的优化实践  批改网官网首页登录 批改网学生用户登录入口  J*aScript包管理器_Npm与Yarn对比  抖音号升级企业号怎么改名字?升级企业号有哪些好处?  mysql怎么查询数据_mysql基础查询语句使用教程  firefox火狐浏览器最新官网主页_ firefox火狐浏览器平台入口直达官方链接  《豆瓣》私信用户方法  智学网成绩单查询系统网_智学网学生平台登录  抖音火山版注销账号抖音会注销吗 抖音火山版与抖音账号注销关系  VBA Outlook邮件自动化:高效集成Excel数据与列标题的策略  《顺丰同城骑士》查看我的技能方法  《爱南宁》认证电动车方法  J*aScript调试技巧_性能分析与内存快照  《七读免费小说》开通会员方法  diskgenius分区工具如何设置Bios启动项  win11如何运行chkdsk命令 Win11检查和修复磁盘逻辑错误教程【修复】  J*a中为什么强调组合优于继承_组合模式带来的灵活性与可维护性解析  word怎么将图片设置为页面背景并不影响打印_Word图片背景设置方法  Golang如何测试结构体方法_Golang reflect方法测试与调用技巧  Win10怎么设置快速启动 Win10开启快速启动设置方法  《绝区零》2.3前瞻|直播|内容介绍  Python高效统计字典嵌套列表值在目标列表中的出现次数  NumPy 高性能技巧:基于多列条件查找最近邻行索引的向量化实现  易车网官网直达入口 易车网在线登录入口  照片整理的黄金法则是怎样的? 理解“收集-筛选-归档-备份”四步流程  京东物流快递破损了怎么办_京东快递破损理赔流程  QQ邮箱注册地址 免费获取QQ邮箱账号  安居客移动经纪人怎么设置自动回复?-安居客移动经纪人设置自动回复的方法  DeepSeek超全面指南:入门必看  Win11如何分屏操作_Win11多窗口分屏技巧  MySQL多重JOIN技巧:高效关联同一表获取多角色信息  Google Drive API 认证:服务账户与OAuth 2.0的选择与实践  《全民k歌》音乐怎么下载到本地2025  Symfony路由参数转换器:实体存在性验证与错误处理策略  哔哩哔哩黑名单怎么查看  VS Code源代码管理(SCM)视图的进阶使用技巧  Pydantic 中“schema”字段命名冲突的解决方案  冬季去哪个城市旅游更有可能观测到极光  《理想汽车》权限管理设置方法  j*a中ArrayBlockingQueue的使用  感染了幽门螺杆菌一定会导致胃癌吗?蚂蚁庄园今日答案最新11.30  微星主板BIOS怎么调整内存时序_内存参数手动优化BIOS设置教程  C++ priority_queue怎么用_C++优先队列底层实现与自定义比较器  c++如何实现观察者设计模式_c++行为型设计模式实战  实时数据流中高效查找最小值与最大值  铁路12306官网入口 铁路12306中国铁路官网登录首页  PHP多语言网站的实现:会话管理与翻译函数优化教程  铁路12306入口 铁路12306官网版入口登录网址  驱动人生:游戏修复指南  Python对象引用与属性赋值:理解链表中的行为 

 2020-07-30

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.