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判断浏览器的类型和语言的函数代码
Feb 28 PHP
Yii结合CKEditor实现图片上传功能
Jun 13 PHP
php中try catch捕获异常实例详解
Nov 21 PHP
PHP实现搜索相似图片
Sep 22 PHP
twig模板获取全局变量的方法
Feb 05 PHP
微信支付PHP SDK ―― 公众号支付代码详解
Sep 13 PHP
php中让人头疼的浮点数运算分析
Oct 10 PHP
[原创]PHP正则删除html代码中a标签并保留标签内容的方法
May 23 PHP
php伪静态验证码不显示的解决方案
Sep 26 PHP
PHP框架实现WebSocket在线聊天通讯系统
Nov 21 PHP
Laravel 验证码认证学习记录小结
Dec 20 PHP
yii框架结合charjs实现统计30天数据的方法
Apr 04 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
简单的过滤字符串中的HTML标记
2006/12/25 PHP
php判断数组中是否存在指定键(key)的方法
2015/03/17 PHP
使用PHP生成二维码的方法汇总
2015/07/22 PHP
PHP判断FORM表单或URL参数来的数据是否为整数的方法
2016/03/25 PHP
Javascript模块模式分析
2008/05/16 Javascript
javascript 设计模式之单体模式 面向对象学习基础
2010/04/18 Javascript
jQuery函数map()和each()介绍及异同点分析
2014/11/08 Javascript
JS实现的文字与图片定时切换效果代码
2015/10/06 Javascript
jquery实现select选择框内容左右移动代码分享
2015/11/21 Javascript
jQuery Ajax 实例代码 ($.ajax、$.post、$.get)
2016/04/29 Javascript
jQuery处理XML文件的几种方法
2016/06/14 Javascript
webpack2.0搭建前端项目的教程详解
2017/04/05 Javascript
Angularjs 动态添加指令并绑定事件的方法
2017/04/13 Javascript
vue定义全局变量和全局方法的方法示例
2018/08/01 Javascript
如何解决React官方脚手架不支持Less的问题(小结)
2018/09/12 Javascript
详解vue 自定义组件使用v-model 及探究其中原理
2019/10/11 Javascript
javascript实现前端input密码输入强度验证
2020/06/24 Javascript
jQuery实现推拉门效果
2020/10/19 jQuery
Jquery Fade用法详解
2020/11/06 jQuery
Python3实现连接SQLite数据库的方法
2014/08/23 Python
Python函数中定义参数的四种方式
2014/11/30 Python
pandas.DataFrame选取/排除特定行的方法
2018/07/03 Python
pytorch实现focal loss的两种方式小结
2020/01/02 Python
tensorflow 实现从checkpoint中获取graph信息
2020/02/10 Python
使用IPython或Spyder将省略号表示的内容完整输出
2020/04/20 Python
使用keras实现非线性回归(两种加激活函数的方式)
2020/07/05 Python
python Yaml、Json、Dict之间的转化
2020/10/19 Python
波兰最大的儿童服装连锁店之一:5.10.15.
2018/02/11 全球购物
俄罗斯GamePark游戏商店网站:购买游戏、游戏机和配件
2020/03/13 全球购物
拉夫劳伦爱尔兰官方网站:Ralph Lauren爱尔兰
2020/04/10 全球购物
民事和解协议书格式
2014/11/29 职场文书
学习雷锋精神倡议书
2015/04/27 职场文书
2015年电气技术员工作总结
2015/07/24 职场文书
退休教师欢送会致辞
2015/07/31 职场文书
演讲稿:​快乐,从不抱怨开始!
2019/04/02 职场文书
js实现模拟购物商城案例
2021/05/18 Javascript