在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

使用Redis保存用户会话Session的案例分析

149次阅读
没有评论

共计 2789 个字符,预计需要花费 7 分钟才能阅读完成。

自动写代码机器人,免费开通

这篇文章将为大家详细讲解有关使用 Redis 保存用户会话 Session 的案例分析,丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

前言

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

下载源码

session_set_save_handler 函数

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

bool session_set_save_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.save_handler = redis

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

?php 
class SessionManager{
 private $redis;
 private $sessionSavePath;
 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_save_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_save_handler 函数设置 session 回调函数,并调用 session_start 函数开启 session 功能。因为本例中 open、close 和 gc 回调函数的作用不是很大,所以直接返回 true。

在 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 保存用户会话 Session 的案例分析

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

使用 Redis 保存用户会话 Session 的案例分析

关于“使用 Redis 保存用户会话 Session 的案例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

向 AI 问一下细节

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-04发表,共计2789字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 婷婷五月深深久久精品 | 国产小视频在线观看网站 | 欧美一级特黄高清免费 | 一区二区国产精品精华液 | 熟妇人妻中文字幕 | 一区二区在线免费视频 | 蜜臀av在线播放一区二区三区 | 欧美精品久久久亚洲 | 小说区图片 | 日本人 视频 - 18jizz | 久久久999 | av鲁丝一区鲁丝二区鲁丝三区 | 四川少妇被弄到高潮 | 四虎国产精品永久在线无码 | 精品国产女同疯狂摩擦2 | 青青青在线视频人视频在线 | 色屁屁影视大全 | 香港午夜三级a三级 | 无码色av一二区在线播放 | 亚洲伊人色欲综合网 | 久久99精品国产免费观看 | 无码人妻丰满熟妇区毛片18 | 67194熟妇在线观看线路1 | 国产精品片 | 九草视频在线观看 | 中国成人在线视频 | 一级人做人爰a全过程免费视频 | 国精产品一线二线三线av | 免费国产一级特黄久久 | 国产精品亚洲欧美一级久久精品 | 热和尚三区四区 | 成人亚洲电影 | 亚洲av色香蕉一区二区三区 | 久久精品人 | 日韩激情无码免费毛片 | 日韩中字在线 | 久久av高潮av无码av喷吹 | 日韩一区二区三区四区区区 | 九九热精品在线视频 | 午夜国产精品视频 | 亚洲中文字幕无码专区 |