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 相关文章推荐
加速XP搜索功能堪比vista
Mar 22 PHP
php 时间计算问题小结
Jan 04 PHP
创建配置文件 用PHP写出自己的BLOG系统 2
Apr 12 PHP
php fsockopen伪造post与get方法的详解
Jun 14 PHP
php 判断网页是否是utf8编码的方法
Jun 06 PHP
thinkphp判断访客为手机端或PC端的方法
Nov 24 PHP
通过php修改xml文档内容的方法
Jan 23 PHP
PHP读取word文档的方法分析【基于COM组件】
Aug 01 PHP
PHP设计模式之注册树模式分析
Jan 26 PHP
PHP高并发和大流量解决方案整理
Dec 24 PHP
laravel框架实现敏感词汇过滤功能示例
Feb 15 PHP
数据结构之利用PHP实现二分搜索树
Oct 25 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
基于mysql的bbs设计(一)
2006/10/09 PHP
javaScript call 函数的用法说明
2010/04/09 Javascript
关于Jqzoom的使用心得 jquery放大镜效果插件
2010/04/12 Javascript
javascript 弹出的窗口返回值给父窗口具体实现
2013/11/23 Javascript
浅谈javascript中的闭包
2015/05/13 Javascript
JS验证逗号隔开可以是中文字母数字
2016/04/22 Javascript
easyui messager alert 三秒后自动关闭提示的实例
2016/11/07 Javascript
JavaScript实现简单的星星评分效果
2017/05/18 Javascript
详解Vue2.0 事件派发与接收
2017/09/05 Javascript
JQuery用$.ajax或$.getJSON跨域获取JSON数据的实现代码
2017/09/23 jQuery
js自定义trim函数实现删除两端空格功能
2018/02/09 Javascript
Vue传参一箩筐(页面、组件)
2019/04/04 Javascript
JS随机密码生成算法
2019/09/23 Javascript
js DOM的事件常见操作实例详解
2019/12/16 Javascript
Python中实现参数类型检查的简单方法
2015/04/21 Python
Selenium定位元素操作示例
2018/08/10 Python
Python中asyncio与aiohttp入门教程
2018/10/16 Python
Python类的继承用法示例
2019/01/31 Python
Pandas删除数据的几种情况(小结)
2019/06/21 Python
python实现大文本文件分割
2019/07/22 Python
Python使用微信itchat接口实现查看自己微信的信息功能详解
2019/08/22 Python
python selenium循环登陆网站的实现
2019/11/04 Python
django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询】
2019/12/12 Python
Django中密码的加密、验密、解密操作
2019/12/19 Python
详解anaconda安装步骤
2020/11/23 Python
CSS3 二级导航菜单的制作的示例
2018/04/02 HTML / CSS
Clarks英国官方网站:全球领军鞋履品牌
2016/11/26 全球购物
Sephora丝芙兰马来西亚官方网站:国际化妆品购物
2018/03/15 全球购物
StubHub美国:购买或出售您的门票
2019/07/09 全球购物
德国购买门票网站:ADticket.de
2019/10/31 全球购物
怎样比较两个类型为String的字符串
2016/08/17 面试题
建筑专业毕业生自荐信
2014/05/25 职场文书
售票员岗位职责
2015/02/15 职场文书
Oracle 区块链表创建过程详解
2021/05/15 Oracle
python 爬取天气网卫星图片
2021/06/07 Python
SQL 聚合、分组和排序
2021/11/11 MySQL