手机版

PHP使用Redis代替文件存储Session

时间:2021-09-06 来源:互联网 编辑:宝哥软件园 浏览:

本文的例子讲述了PHP用Redis代替文件存储Session的方法。分享给大家参考,如下:

PHP默认使用文件存储会话。如果并发量大,效率很低。Redis非常支持高并发,所以可以用Redis代替文件存储会话。

这里,我们介绍php中session_set_save_handler的功能和用法。该功能定义了用户级的会话保存功能(如打开、关闭、写入等)。).

原型如下:

bool session_set_save_hanler(回调打开、回调关闭、回调读取、回调写入、回调销毁、回调gc)

session_set_save_handler函数的每个参数的功能如下

参数描述open在会话打开时调用此函数。接收两个参数。第一个参数是保存会话的路径,第二个参数是会话的名称。当会话操作完成时,close调用这个函数。未收到任何参数。读取将会话标识作为参数。通过会话标识从数据存储中获取数据,并返回该数据。如果数据为空,可以返回一个空字符串。该函数在调用session_start之前被触发。存储数据时会调用write。有两个参数,一个是会话标识,另一个是会话的数据销毁。调用session_destroy函数时,会触发destroy函数。当php执行会话垃圾收集机制时,只触发一个参数会话标识gc。在使用此功能之前,请将php.ini配置文件的session.save _ handler选项设置为user,否则session_set_save_handle将不会生效。

用以下代码编写一个会话管理类sessionManager.php:

?phpclassessionmanager { private $ redis;private $ sessionSavePathprivate $ sessionNameprivate $ sessionExpireTime=30//redis,会话到期时间为30s public function _ _ construct(){ $ this-redis=new redis();//创建phpredis实例$ this-Redis-connect ('127.0.0.1 ',6379);//连接redis $ this-redis-auth(' 107 lab ');//authorize $ retval=session _ set _ save _ handler(array ($ this,' open ')、array ($ this,' close ')、array ($ this,' read ')、array ($ this,' write ')、array($ this,' destroy ')session _ start();} public function open($path,$ name){ return true;} public function close(){ return true;} public function read($ id){ $ value=$ this-redis-get($ id);//获取指定的记录if($ value){ return $ value;} else { return“”;}} public function write ($ id,$ data) {if ($ this-redis-set ($ id,$ data)){//以session ID为密钥,存储$ this-redis-expire ($ id,$ this-session expire time);//设置redis中数据的到期时间,即session的到期时间为return true}返回false} public function destroy($ id){ if($ this-redis-delete($ id)){//删除redis中指定的记录返回true}返回false}公共函数GC($ max lifetime){ return true;} public function _ _ destrust(){ session _ write _ close();}}SessionManager构造函数主要用于连接Redis服务器,使用session_set_save_handler函数设置session回调函数,调用session_start函数启动session函数。在这个例子中,open、close和gc回调函数不是很有效,所以它们直接返回true。

在写回调函数中,会话ID作为密钥,会话的数据作为值存储到redis服务器,会话的到期时间设置为30秒。在read回调中,会话ID被用作从redis服务器读取数据并返回数据的密钥。另一方面,当销毁回调函数较重时,会话ID被用作从redis服务器删除相应会话数据的密钥。

要使用,只需包含SessionManager类并实例化一个SessionManager对象。在下面设置一个session_set.php文件。输入代码

?PHP include(' session manager . PHP ');new session manager();$_SESSION['username']='船长';然后创建一个session_get.php文件,并输入以下代码:

?PHP include(' session manager . PHP ');new session manager();echo $ _ SESSION[' username '];在测试中,首先访问会话集php,然后访问会话set.php。输出结果如下:

再次查看redis数据库,如下所示

127 . 0 . 0 . 1:6379 key * 1)' oe94 EIC 337 slnjv 1 bvlreoa 574 ' 127 . 0 . 0 . 1:6379 get oe94 EIC 337 slnjv 1 bvlreoa 574 ' username | s 33607: ' captain \ ';'更多对PHP相关内容感兴趣的读者可以查看本网站专题:《php+redis数据库程序设计技巧总结》、《PHP扩展开发教程》、《php+mysql数据库操作入门教程》、《php+mysqli数据库程序设计技巧总结》、《php面向对象程序设计入门教程》、《PHP网络编程技巧总结》、《php常见数据库操作技巧汇总》、0103010

希望本文对PHP编程有所帮助。

版权声明:PHP使用Redis代替文件存储Session是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。