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 相关文章推荐
支持oicq头像的留言簿(一)
Oct 09 PHP
php生成文件
Jan 15 PHP
修改了一个很不错的php验证码(支持中文)
Feb 14 PHP
CakePHP去除默认显示的标题及图标的方法
Oct 22 PHP
PHP利用REFERER根居访问来地址进行页面跳转
Sep 28 PHP
php与java通过socket通信的实现代码
Oct 21 PHP
3款值得推荐的微信开发开源框架
Oct 28 PHP
php数组操作之键名比较与差集、交集赋值的方法
Nov 10 PHP
如何使用PHP对网站验证码进行破解
Sep 17 PHP
Zend Framework框架之Zend_Mail实现发送Email邮件验证功能及解决标题乱码的方法
Mar 21 PHP
Yii2增删改查之查询 where参数详细介绍
Aug 08 PHP
使用XHProf查找PHP性能瓶颈的实例
Dec 13 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自动生成后台导航网址的最佳方法
2013/08/27 PHP
codeigniter实现get分页的方法
2015/07/10 PHP
php打开本地exe程序,js打开本地exe应用程序,并传递相关参数方法
2018/02/06 PHP
Javascript实例教程(19) 使用HoTMetal(4)
2006/12/23 Javascript
js中更短的 Array 类型转换
2011/10/30 Javascript
关于js datetime的那点事
2011/11/15 Javascript
JS实现下拉框的动态添加(附效果)
2013/04/03 Javascript
jquery插件corner实现圆角边框的方法
2015/03/09 Javascript
javascript通过获取html标签属性class实现多选项卡的方法
2015/07/27 Javascript
批量下载对路网图片并生成html的实现方法
2016/06/07 Javascript
Angularjs CURD 详解及实例代码
2016/09/14 Javascript
Angularjs实现分页和分页算法的示例代码
2016/12/23 Javascript
浅谈js for循环输出i为同一值的问题
2017/03/01 Javascript
bootstrap table 多选框分页保留示例代码
2017/03/08 Javascript
基于angular-utils-ui-breadcrumbs使用心得(分享)
2017/11/03 Javascript
Vuex持久化插件(vuex-persistedstate)解决刷新数据消失的问题
2019/04/16 Javascript
浅谈Vue SSR中的Bundle的具有使用
2019/11/21 Javascript
Node.js API详解之 timer模块用法实例分析
2020/05/07 Javascript
常用python数据类型转换函数总结
2014/03/11 Python
Python使用新浪微博API发送微博的例子
2014/04/10 Python
python 对txt中每行内容进行批量替换的方法
2018/07/11 Python
Python json模块dumps、loads操作示例
2018/09/06 Python
python numpy库np.percentile用法说明
2020/06/08 Python
Python 私有属性和私有方法应用场景分析
2020/06/19 Python
Python 解析简单的XML数据
2020/07/24 Python
python利用platform模块获取系统信息
2020/10/09 Python
使用CSS3制作响应式导航菜单的方法
2015/07/12 HTML / CSS
美国排名第一的在线葡萄酒商店:Wine.com
2016/09/07 全球购物
超市创业计划书
2014/04/24 职场文书
大学生村官考核材料
2014/05/23 职场文书
宣传活动总结范文
2014/07/01 职场文书
2014小学数学教研组工作总结
2014/12/06 职场文书
认识实习感想
2015/08/10 职场文书
2016年全国助残日活动总结
2016/04/01 职场文书
如何制作自己的原生JavaScript路由
2021/05/05 Javascript
详解Node.js如何处理ES6模块
2021/05/15 Javascript