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 相关文章推荐
FleaPHP的安全设置方法
Sep 15 PHP
yii框架源码分析之创建controller代码
Jun 28 PHP
php页面跳转代码 输入网址跳转到你定义的页面
Mar 28 PHP
利用PHP实现图片等比例放大和缩小的方法详解
Jun 06 PHP
修改destoon会员公司的伪静态中的com目录的方法
Aug 21 PHP
PHP中开启gzip压缩的2种方法
Jan 31 PHP
PHP常用工具类大全附全部代码下载
Dec 07 PHP
使用Composer安装Yii框架的方法
Mar 15 PHP
yii2实现分页,带搜索的分页功能示例
Jan 07 PHP
PHP PDOStatement::fetch讲解
Jan 31 PHP
PHP sdk实现在线打包代码示例
Dec 09 PHP
PHP如何解决微信文章图片防盗链
Dec 09 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字符串word末字符实现大小写互换的方法
2014/11/10 PHP
PHP数据库操作四:mongodb用法分析
2017/08/16 PHP
javascript 时间比较实现代码
2009/10/28 Javascript
JavaScript自执行闭包的小例子
2013/06/29 Javascript
Js保留小数点的4种效果实现代码分享
2014/04/12 Javascript
Javascript中的默认参数详解
2014/10/22 Javascript
用简洁的jQuery方法toggleClass实现隔行换色
2014/10/22 Javascript
Javascript中的五种数据类型详解
2014/12/26 Javascript
推荐阅读的js快速判断IE浏览器(兼容IE10与IE11)
2015/12/13 Javascript
JQuery插件Marquee.js实现无缝滚动效果
2016/04/26 Javascript
JavaScript Ajax编程 应用篇
2016/07/02 Javascript
微信JSAPI支付操作需要注意的细节
2017/01/10 Javascript
Vue2仿淘宝实现省市区三级联动
2020/04/15 Javascript
vue.js使用3DES加密的方法示例
2018/05/18 Javascript
node.js之基础加密算法模块crypto详解
2018/09/11 Javascript
关于vue编译版本引入的问题的解决
2018/09/17 Javascript
js实现导航跟随效果
2018/11/17 Javascript
使用 Vue cli 3.0 构建自定义组件库的方法
2019/04/30 Javascript
python实现的文件同步服务器实例
2015/06/02 Python
Python2.7简单连接与操作MySQL的方法
2016/04/27 Python
python万年历实现代码 含运行结果
2017/05/20 Python
python实现学生信息管理系统
2020/04/05 Python
Anaconda下配置python+opencv+contribx的实例讲解
2018/08/06 Python
Python异常的检测和处理方法
2018/10/26 Python
python assert的用处示例详解
2019/04/01 Python
python代理工具mitmproxy使用指南
2019/07/04 Python
Flask框架学习笔记之表单基础介绍与表单提交方式
2019/08/12 Python
仿酷狗html5手机音乐播放器主要部分代码
2013/05/15 HTML / CSS
Everything But Water官网:美国泳装品牌
2019/03/17 全球购物
main 函数执行以前,还会执行什么代码
2013/04/17 面试题
C++面试题:关于链表和指针
2013/06/05 面试题
党员公开承诺书和承诺事项
2014/03/25 职场文书
党员先进事迹材料
2014/12/19 职场文书
退休欢送会主持词
2015/07/01 职场文书
公司员工管理制度
2015/08/04 职场文书
Win11安装受阻怎么办? Windows11安装问题与解决方案汇总
2021/11/21 数码科技