session 重写进入redis测试

在实际业务中,当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

posted @ 2016-12-06 10:19  李照耀  阅读(775)  评论(0编辑  收藏  举报