ThinkPHP自定义Redis处理SESSION的实现方法


Posted in PHP onMay 16, 2016

本文实例讲述了ThinkPHP自定义Redis处理SESSION的实现方法。分享给大家供大家参考,具体如下:

日常中我们都会使用到session来保存用户登录的信息,常用的session的保存方式有:文件保存(默认)、数据库保存、Redis保存、memcached等。这里主要记录一下在用ThinkPHP处理session用Redis来保存session的用法。

1.在配置项中定义:

'SESSION_TYPE' => 'Redis', //session保存类型
'SESSION_PREFIX' => 'sess_', //session前缀
'REDIS_HOST' => '127.0.0.1' //REDIS服务器地址
'REDIS_PORT' => 6379, //REDIS连接端口号
'SESSION_EXPIRE' => 3600, //SESSION过期时间

可以ThinkPHP/Common/functions.php文件中找到定义session的方法,大约在1179行左右读取session驱动的判断。如果我们定义了配置项SESSION_TYPE,则会new一个Redis对象并调用会话存储函数session_set_save_handler()。

2.在ThinkPHP\Library\Think\Session\Driver目录下新建Redis.class.php文件

文件内容如下:

<?php
namespace Think\Session\Driver;
class Redis {
//  Redis连接对象
  private $redis;
//  Session过期时间
  private $expire;
  /**
   * 打开方法
   * @param type $path
   * @param type $name
   * @return type
   */
  public function open($path, $name) {
  $this->expire = C('SESSION_EXPIRE') ? C('SESSION_EXPIRE') : ini_get('session.gc_maxLifetime');
  $this->redis = new Redis();
  return $this->redis->connect(C('REDIS_HOST'), C('REDIS_PORT'));
  }
  /**
   * 关闭
   * @return type
   */
  public function close() {
  return $this->redis->close();
  }
  /**
   * 读取
   * @param string $id
   * @return type
   */
  public function read($id) {
  $id = C('SESSION_PREFIX') . $id;
  $data = $this->redis->get($id);
  return $data ? $data : '';
  }
  /**
   * 写入
   * @param string $id
   * @param type $data
   * @return type
   */
  public function write($id, $data) {
  $id = C('SESSION_PREFIX') . $id;
  return $this->redis->set($id, $data, $this->expire);
  }
  /**
   * 销毁
   * @param string $id
   */
  public function destroy($id) {
  $id = C('SESSION_PREFIX') . $id;
  $this->redis->delete($id);
  }
  /**
   * 垃圾回收
   * @param type $maxLifeTime
   * @return boolean
   */
  public function gc($maxLifeTime) {
  return true;
  }
}

至此就完成了Redis对session的处理。

memcached的方法和Redis差不多一样!

PHP 相关文章推荐
IIS下配置Php+Mysql+zend的图文教程
Dec 08 PHP
php getsiteurl()函数
Sep 05 PHP
一步一步学习PHP(8) php 数组
Mar 05 PHP
一个基于PDO的数据库操作类
Mar 24 PHP
解析zend Framework如何自动加载类
Jun 28 PHP
关于php循环跳出的问题
Jul 01 PHP
linux下编译安装memcached服务
Aug 03 PHP
php删除文本文件中重复行的方法
Apr 28 PHP
PHP中的数组处理函数实例总结
Jan 09 PHP
PHP使用curl函数发送Post请求的注意事项
Nov 26 PHP
PHP中$GLOBALS与global的区别详解
Mar 21 PHP
PHP调用QQ互联接口实现QQ登录网站功能示例
Oct 24 PHP
Yii2 GridView实现列表页直接修改数据的方法
May 16 #PHP
ThinkPHP3.2.2实现持久登录(记住我)功能的方法
May 16 #PHP
php metaphone()函数的定义和用法
May 15 #PHP
php图片上传类 附调用方法
May 15 #PHP
php简单的上传类分享
May 15 #PHP
分享php多功能图片处理类
May 15 #PHP
非常经典的PHP文件上传类分享
May 15 #PHP
You might like
php视频拍照上传头像功能实现代码分享
2015/10/08 PHP
PHP的Yii框架中过滤器相关的使用总结
2016/03/29 PHP
php mysql PDO 查询操作的实例详解
2017/09/23 PHP
PHP实现支持CURL字符串证书传输的方法
2019/03/23 PHP
js类的静态属性和实例属性的理解
2009/10/01 Javascript
javascript学习笔记(十) js对象 继承
2012/06/19 Javascript
jquery动画4.升级版遮罩效果的图片走廊--带自动运行效果
2012/08/24 Javascript
基于dom编程中 动态创建与删除元素的使用
2013/04/17 Javascript
jquery 触发a链接点击事件解决方案
2013/05/02 Javascript
jQuery CSS3相结合实现时钟插件
2016/01/08 Javascript
AngularJs篇:使用AngularJs打造一个简易权限系统的实现代码
2016/12/26 Javascript
jQuery阻止移动端遮罩层后页面滚动
2017/03/15 Javascript
vue监听input标签的value值方法
2018/08/27 Javascript
前端防止用户重复提交js实现代码示例
2018/09/07 Javascript
微信小程序授权登录解决方案的代码实例(含未通过授权解决方案)
2019/05/10 Javascript
JS中如何轻松遍历对象属性的方式总结
2019/08/06 Javascript
[56:12]LGD vs Optic Supermajor小组赛D组胜者组决赛 BO3 第一场 6.3
2018/06/04 DOTA
[56:42]完美世界DOTA2联赛循环赛 Matador vs Forest 第二场 11.06
2020/11/06 DOTA
django 按时间范围查询数据库实例代码
2018/02/11 Python
Python合并同一个文件夹下所有PDF文件的方法
2019/03/11 Python
python获取Linux发行版名称
2019/08/30 Python
Python异常原理及异常捕捉实现过程解析
2020/03/25 Python
查看已安装tensorflow版本的方法示例
2020/04/19 Python
详解appium自动化测试工具(monitor、uiautomatorviewer)
2021/01/27 Python
巧用CSS3的calc()宽度计算做响应模式布局的方法
2018/03/22 HTML / CSS
CSS3 画基本图形,圆形、椭圆形、三角形等
2016/09/20 HTML / CSS
StubHub智利:购买和出售您的门票
2016/11/23 全球购物
澳大利亚当地社区首选的光学商店:1001 Optical
2019/08/24 全球购物
日本整理专家Marie Kondo的官方在线商店:KonMari
2020/06/29 全球购物
商场端午节活动方案
2014/01/29 职场文书
计算机专业毕业生自荐信范文
2014/03/06 职场文书
2014年小学教师工作自我评价
2014/09/22 职场文书
承德避暑山庄导游词
2015/02/03 职场文书
2019年员工旷工保证书!
2019/06/28 职场文书
PyMongo 查询数据的实现
2021/06/28 Python