使用redis存储PHP session
程序员文章站
2024-03-20 13:17:46
...
PHP自带的session是文件格式存储,不利于高并发访问,所以将PHP原生的session改为redis存储。
文章方法转自不知名的大神,并自己做了写总结和修改
1 在php.ini文件中修改PHP session的默认存储方式,将文件存储修改为会话存储
#session.save_handler=file
session.save_handler = user
2 写调用redis的方法类
主要使用session_set_save_handler方法设置用户自定义会话并存储数据。
<?php
class SessionManager
{
private $redis;
private $session_expire_time = 3600;
public function __construct()
{
//连接redis数据库
$this->redis = new Redis();
$this->redis->connect('127.0.0.1',6379) || die('连接redis服务器失败');
//$this->redis->auth('password');
$this->redis->select(0); //选择0号数据库
//设置用户自定义会话存储函数
session_set_save_handler(
array($this,"open"),
array($this,"close"),
array($this,"read"),
array($this,"write"),
array($this,"destroy"),
array($this,"gc")
);
session_start();
}
//open回调函数类似于类的构造函数,在会话打开的时候会被调用。
//是自动开始会话或者通过调用session_start()后第一个被调用的回调函数
//回调函数成功返回TRUE
public function open(){
return TRUE;
}
//类似于析构函数的回调函数
//在write回调函数调用之后调用
//当调用session_write_close()函数之后返回TRUE
public function close(){
return TRUE;
}
//如果会话中有数据,将返回序列化字符串
//无数据则返回空字符串
//自动开始会话或调用session_start()后,
//通过该函数返回值填充$_seesion函数
public function read($id){
$value = $this->redis->get($id);
if($value){
return $value;
}else{
return '';
}
}
//保存会话数据时调用
//会将$_SESSION中的值填充到redis中
public function write($id,$data){
if($this->redis->set($id,$data)){
$this->redis->expire($id,$this->session_expire_time);
return TRUE;
}else{
return FALSE;
}
}
//使用session_destoy()函数时调用
public function destroy($id){
if($this->redis->delete($id)){
return TRUE;
}else{
return FALSE;
}
}
//垃圾回收函数
//会不定时的清理
public function gc(){
return TRUE;
}
public function __destruct()
{
// TODO: Implement __destruct() method.
session_write_close();
}
}
?>
3 使用上述类的方法,通过session自带的方法可以使用函数。
new SessionManager();
$_SESSION['username'] = "user";
echo $_SESSION['username'];
session_destroy();
4 测试验证
首先,不使用该类,使用自带的session,
可以在/var/lib/php/session文件夹中可以读取到session文件;
其次,使用redis存储session的方法,打开redis-cli查询,并比较/var/lib/php/session中文件,
可以发现,调用redis方法时,/var/lib/php/session中文件不增加,仅在redis数据库中出现数据。
上一篇: mailto在网页中链接Email地址
下一篇: React实现简单购物车