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 SQL防注入代码集合
Apr 25 PHP
linux下删除7天前日志的代码(php+shell)
Jan 02 PHP
PHP中使用xmlreader读取xml数据示例
Dec 29 PHP
php在linux下检测mysql同步状态的方法
Jan 15 PHP
PHP制作百度词典查词采集器
Jan 29 PHP
PHP使用gmdate实现将一个UNIX 时间格式化成GMT文本的方法
Mar 19 PHP
php使用post数组的键值创建同名变量并赋值的方法
Apr 03 PHP
php中实现用数组妩媚地生成要执行的sql语句
Jul 10 PHP
PHP针对字符串开头和结尾的判断方法
Jul 11 PHP
php中bind_param()函数用法分析
Mar 28 PHP
PHP无限极分类函数的实现方法详解
Apr 15 PHP
php用wangeditor3实现图片上传功能
Aug 22 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/04/20 PHP
PHP类相关知识点实例总结
2016/09/28 PHP
js判断生效时间不得大于失效时间的思路及代码
2013/04/23 Javascript
JavaScript简介
2015/02/15 Javascript
javascript检测flash插件是否被禁用的方法
2016/01/14 Javascript
漫谈JS引擎的运行机制 你应该知道什么
2016/06/15 Javascript
jQuery学习笔记之回调函数
2016/08/15 Javascript
js判断价格,必须为数字且不能为负数的实现方法
2016/10/07 Javascript
angular ngClick阻止冒泡使用默认行为的方法
2016/11/03 Javascript
浅谈javascript的闭包
2017/01/23 Javascript
nodejs 简单实现动态html的方法
2018/05/12 NodeJs
Node.js 使用axios读写influxDB的方法示例
2018/10/26 Javascript
详细讲解如何创建, 发布自己的 Vue UI 组件库
2019/05/29 Javascript
对layui中的onevent 和event的使用详解
2019/09/06 Javascript
微信小程序页面间传递数组对象方法解析
2019/11/06 Javascript
vue vant Area组件使用详解
2019/12/09 Javascript
单线程JavaScript实现异步过程详解
2020/05/19 Javascript
[54:51]Ti4 冒泡赛第二轮LGD vs C9 3
2014/07/14 DOTA
rhythmbox中文名乱码问题解决方法
2008/09/06 Python
python通过shutil实现快速文件复制的方法
2015/03/14 Python
python实现数据预处理之填充缺失值的示例
2017/12/22 Python
Python for循环中的陷阱详解
2018/07/13 Python
Django中URL的参数传递的实现
2019/08/04 Python
python制作朋友圈九宫格图片
2019/11/03 Python
Python namedtuple命名元组实现过程解析
2020/01/08 Python
HTML5拖拉上传文件的简单实例
2017/01/11 HTML / CSS
美国在线鞋类零售商:LifeStride
2019/06/09 全球购物
SmartBuyGlasses比利时:购买品牌太阳镜和眼镜
2019/08/09 全球购物
欧克利英国官网:Oakley英国
2019/08/24 全球购物
意大利文具和办公产品在线商店:Y-Office
2020/02/27 全球购物
好家长事迹材料
2014/01/23 职场文书
大学运动会入场词
2014/02/22 职场文书
小学综合实践活动总结
2014/07/07 职场文书
2014年小学国庆节活动方案
2014/09/16 职场文书
MySQL系列之五 视图、存储函数、存储过程、触发器
2021/07/02 MySQL
MongoDB修改oplog大小的四种方法
2022/04/11 MongoDB