php默认使用文件存储session,如果并发量大,效率非常低。而redis对高并发的支持非常好,所以,可以使用redis替代文件存储session。
这里,介绍下php的session_set_save_handler 函数的作用和使用方法。该函数定义用户级session保存函数(如打开、关闭、写入等)。原型如下:

bool session_set_save_hanler(callback open,callback close,callback read,callback write,callback destory,callback gc)

在使用该函数前,先把php.ini配置文件的session.save_handler选项设置为user,否则session_set_save_handle 不会生效。

下面是使用redis存储session的一个实例。

编写一个session管理类sessionManager ,代码如下:

<?phpclass SessionManager {private $reids;private $sessionSavePath;private $sessionName;private $sessionExpireTime=300;public function __construct() {$this->reids=new Redis();$this->reids->connect('127.0.0.1',6379);$retval=session_set_save_handler(array($this,"open"),array($this,"close"),array($this,"read"),array($this,"write"),array($this,"destroy"),array($this,"gc"));
}public function open($path,$name) {return true;
}public function close() {return true;
}public function read($id) {$vale=$this->reids->get($id);if($vale) {return $vale;}else {return '';}
}public function write($id,$data) {if($this->reids->set($id,$data)) {$this->reids->expire($id,$this->sessionExpireTime);return true;}return false;
}public function destroy($id) {if($this->reids->delete($id)) {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的过期时间为300秒。在read回调函数重,以session ID 作为key从redis服务器中读取数据,并返回此数据。而在destroy回调函数重,则以session ID 作为key 从redis服务器中删除对应的session数据。

使用时,只需包含SessionManager类,然后实例化一个SessionManager对象。下面建立个session_set.php文件。输入代码:

<?phpinclude("SessionManager.php");new SessionManager(); //开启session管理$_SESSION['username']='hezikuang';//创建session变量
?>

然后再创建一个session_get.php文件,输入如下代码:

<?phpinclude("SessionManager.php");new SessionManager(); //开启session管理echo $_SESSION['username'];
?>

可以访问session_get.php,看看是否成功。

session存储的替代方法redis相关推荐

  1. php session存到redis,php Session存储到Redis的方法

    php Session存储到Redis的方法 当然要写先安装php的扩展,可参考这篇文章:Redis及PHP扩展安装修改php.ini的设置 复制代码 代码如下: session.save_handl ...

  2. C# redis 分布式session存储

    https://github.com/uliian/SessionExtentionStore 一个基于Redis的Session存储扩展方案,解决ASP.NET中Session的局限性和跨应用程序使 ...

  3. Flask 框架中 上下文基础理念,包括cookie,session存储方法,requset属性,current_app模块和g模块...

    Flask中上下文,分为请求上下文和应用上下文.既状态留存 ,就是把变量存在某一个地方可以调用 请求上下文:实际就是request和session用法理念,既都是可以存储东西. 应用上下文:既变量共享 ...

  4. 从spring-session存储结构探讨session存储方案的演变

    我们知道Spring Session 主要解决了分布式场景下 Session 的共享问题,本文将从 Spring Session 的源码出发,来讨论一些 Session 设计的细节. 一.Spring ...

  5. cas的session存储及实现共享的

    cas的session存储及实现共享的原理: cas在HashMapBackedSessionMappingStorage存session所以后面可以根据自己的tic,结合cookie反向生成sess ...

  6. java session存储6_Session是怎么实现的?存储在哪里?

    目录 前言 文章内容转载或摘录自,如下文章.最后将在文末[博主注]这一部分,指出一些需要注意的地方. 为什么有session? 首先大家知道,http协议是无状态的,即你连续访问某个网页100次和访问 ...

  7. 高性能存储之--快速理解redis(简版)

    为什么要用NoSql 随着流量的增加,链路性能会成为系统非常大的挑战,实现链路高性能有以下方案: 对于关系数据库,为解决高QPS带来的数据库压力,可以采用分库分表.读写分离.但还会存在一些挑战,比如I ...

  8. Session 存储方式

    简单来说,Session就是服务器给客户端的一个编号,当一台web服务器运行时,可能 是有多个用户都在浏览这台服务器上的网站,当每个用户首次与这台服务器建立连接时,它就与这个服务器建立了一个Sessi ...

  9. asp.net session 介绍一三种Session存储方式

    asp.net session 介绍一三种Session存储方式 www.firnow.com 时间:2009-03-04 作者:匿名 编辑:sky 点击: 1478 [评论] 对于asp.net的程 ...

最新文章

  1. 面试官:Mysql 中主库跑太快,从库追不上怎么整?
  2. 梯度与梯度下降法详解
  3. php的实体字符表,php htmlspecialchars_decode() 函数把预定义的 HTML 实体转换为字符
  4. WordPress一个还不错的404html单页代码
  5. Python3自定义json逐层解析器
  6. Java学习个人备忘录之接口
  7. vue中this.$set的用法
  8. qt 定义一个长度的数组_6.8 C++字符数组
  9. 下载mysql驱动jar包
  10. 移动互联网浩荡十年 有的升腾,有的陨落
  11. Linux傻瓜式安装k8s
  12. android qq 邮箱格式,qq邮箱怎么填写格式 qq邮箱格式写法介绍
  13. 什么是软件即服务(SaaS) ? SaaS新手入门指南
  14. python 处理英文步骤
  15. COSO内部控制框架
  16. 用计算机专业术语祝福,学习计算机知识必须懂得50个专业术语
  17. 区块链详细应用举例(一)
  18. 从燃油车布局新能源,汽车服务商们谋破局
  19. C#使用ODBC连接MySql数据库
  20. oracle ebs 的预克隆

热门文章

  1. 关系 base_weather 不存在_国培教育-2020江苏公务员考试:反对关系真的好用吗?...
  2. 注解java_Java注解教程及自定义注解
  3. Linux中文件复制、删除、移动、压缩、解压命令
  4. Numpy Data type
  5. 什么是微调(Fine Tune)?什么时候使用什么样的微调?【数据量和数据相似度决定】
  6. 一文理解接口和抽象类
  7. 外卖小程序源码-带流量主-个人用户可接入
  8. Direct HTTP Tunnel(直接HTTP客户端)
  9. 计算机学院信息系统,信息系统
  10. 防御 | 阻止木马侵入(电脑设置)