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 相关文章推荐
php判断输入不超过mysql的varchar字段的长度范围
Jun 24 PHP
使用PHP实现密保卡功能实现代码&amp;lt;打包下载直接运行&amp;gt;
Oct 09 PHP
解析php利用正则表达式解决采集内容排版的问题
Jun 20 PHP
php实现12306余票查询、价格查询示例
Apr 17 PHP
PHP实现的连贯操作、链式操作实例
Jul 08 PHP
自己写的php curl库实现整站克隆功能
Feb 12 PHP
微信公众平台实现获取用户OpenID的方法
Apr 15 PHP
PHP判断是否连接上网络的方法
Jul 01 PHP
利用Fix Rss Feeds插件修复WordPress的Feed显示错误
Dec 19 PHP
微信公众号支付之坑:调用支付jsapi缺少参数 timeStamp等错误解决方法
Jan 12 PHP
PHP正则匹配反斜杠'\'和美元'$'的方法
Feb 08 PHP
tp框架(thinkPHP)实现三次登陆密码错误之后锁定账号功能示例
May 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
注意:php5.4删除了session_unregister函数
2013/08/05 PHP
PHP运行模式汇总
2016/11/06 PHP
php实现图片按比例截取的方法
2017/02/06 PHP
ThinkPHP中类的构造函数_construct()与_initialize()的区别详解
2017/03/13 PHP
php实现快速对二维数组某一列进行组装的方法小结
2019/12/04 PHP
Some tips of wmi scripting in jscript (1)
2007/04/03 Javascript
javaScript 动态访问JSon元素示例代码
2013/08/30 Javascript
js实现键盘操作实现div的移动或改变的原理及代码
2014/06/23 Javascript
js实现多选项切换导航菜单的方法
2015/02/06 Javascript
JavaScript常用脚本汇总(一)
2015/03/04 Javascript
js实现鼠标点击左上角滑动菜单效果代码
2015/09/06 Javascript
jquery 实现输入邮箱时自动补全下拉提示功能
2015/10/04 Javascript
AngularJS入门教程之数据绑定原理详解
2016/11/02 Javascript
AngularJS动态加载模块和依赖的方法分析
2016/11/08 Javascript
Highcharts+NodeJS搭建数据可视化平台示例
2017/01/01 NodeJs
微信小程序 数组中的push与concat的区别
2017/01/05 Javascript
解决jQuery ajax动态新增节点无法触发点击事件的问题
2017/05/24 jQuery
VUE在for循环里面根据内容值动态的加入class值的方法
2018/08/12 Javascript
Vue 应用中结合vux使用微信 jssdk的方法
2018/08/28 Javascript
Vue自定义render统一项目组弹框功能
2020/06/07 Javascript
Vue移动端项目实现使用手机预览调试操作
2020/07/18 Javascript
JavaScript实现简单日历效果
2020/09/11 Javascript
pytorch 归一化与反归一化实例
2019/12/31 Python
Python单例模式的四种创建方式实例解析
2020/03/04 Python
C# .NET面试题
2015/11/28 面试题
小学生读书活动总结
2014/06/30 职场文书
中华在我心中演讲稿
2014/09/13 职场文书
幼儿园园长个人总结
2015/03/02 职场文书
2015年实习单位评语
2015/03/25 职场文书
污水处理保证书
2015/05/09 职场文书
2015年教师节主持词
2015/07/03 职场文书
家属联谊会致辞
2015/07/31 职场文书
公司岗位说明书
2015/10/08 职场文书
2019年幼儿园家长接送责任书
2019/10/29 职场文书
节约用水广告语60条
2019/11/14 职场文书
python 判断文件或文件夹是否存在
2022/03/18 Python