在实际业务中,当session存储过多 或者操作频繁,业务逐渐扩展的时候,文件存储已经无法满足session操作速度和需求,可以考虑用数据库或者nosql的redis来存储session,本文讲解如何用redis存储。数据库可以以此类推。
代码如下:
<?php
global $redis;//声明全局变量redis
$redis=new Redis();//实例化redis
$redis->connect('127.0.0.1', 6379);//连接redis
$redis->auth("redis的密码");//认证redis 请修改为你的密码 如果没有设置密码 注释该行代码
//从redis取数据
function get_redis($key)
{
global $redis;//声明全局变量redis
return $redis->get($key);//get获取值
}
//向redis存数据
function set_redis($key,$data,$expire_time=1800)
{
global $redis;//声明全局变量redis
$redis->set($key,$data,$expire_time);//set设置值
}
//开启session
function sess_open()
{
}
//关闭session
function sess_close()
{
}
//读取session sess_id就是 session_id
function sess_read($sess_id)
{
$val=get_redis($sess_id);
return(unserialize($val));
}
//写入session sess_id就是 session_id sess_data就是session的整个数据
function sess_write($sess_id, $sess_data)
{
set_redis($sess_id,serialize($sess_data));
session_commit();
}
//清除session
function sess_destroy()
{
}
function sess_gc()
{
}
//声明重写
session_set_save_handler(
'sess_open',
'sess_close',
'sess_read',
'sess_write',
'sess_destroy',
'sess_gc'
);
session_start();
$_SESSION['user']=array("name"=>"hello","tel"=>"world");
register_shutdown_function('session_write_close');//注册事件 页面结束写入session 关闭session
exit();
?>
redis管理工具中看到的截图
同样的,如果是数据库存储的话,可以建立一个 key value的数据库 session_id session_data两个字段就够了用来存储和更新。
Tips:session不采用文件存储还有一个好处 就是能够跨站共享,因为session被存储到后端的nosql数据库了,只要都连接这个后端数据,就能够共享session