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开发入门教程之面向对象
Dec 05 PHP
PHP控制网页过期时间的代码
Sep 28 PHP
php继承的一个应用
Sep 06 PHP
wordpress自定义url参数实现路由功能的代码示例
Nov 28 PHP
PHP调试函数和日志记录函数分享
Jan 31 PHP
详解WordPress中添加和执行动作的函数使用方法
Dec 29 PHP
CodeIgniter配置之database.php用法实例分析
Jan 20 PHP
PHP的中使用非缓冲模式查询数据库的方法
Feb 05 PHP
php 中htmlentities导致中文无法查询问题
Sep 10 PHP
Thinkphp 框架配置操作之配置加载与读取配置实例分析
May 15 PHP
thinkphp 框架数据库切换实现方法分析
May 18 PHP
php实现简易计算器
Aug 28 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 MVC
2014/09/10 PHP
PHP版单点登陆实现方案的实例
2016/11/17 PHP
php文件包含的几种方式总结
2019/09/19 PHP
laravel框架使用极光推送消息操作示例
2020/02/15 PHP
利用jquery操作select下拉列表框的代码
2010/06/04 Javascript
jquery中对表单的基本操作代码
2010/07/29 Javascript
jQuery ready函数滥用分析
2011/02/16 Javascript
用jquery实现自定义风格的滑动条实现代码
2011/04/26 Javascript
web的各种前端打印方法之jquery打印插件PrintArea实现网页打印
2013/01/09 Javascript
js阻止事件追加的具体实现
2014/10/15 Javascript
javascript操作Cookie(设置、读取、删除)方法详解
2015/03/18 Javascript
Sea.JS知识总结
2016/05/05 Javascript
Javascript实现跑马灯效果的简单实例
2016/05/31 Javascript
微信小程序 跳转传参数与传对象详解及实例代码
2017/03/14 Javascript
JavaScript事件对象深入详解
2018/12/30 Javascript
微信小程序开发搜索功能实现(前端+后端+数据库)
2020/03/04 Javascript
js实现金山打字通小游戏
2020/07/24 Javascript
[57:38]2018DOTA2亚洲邀请赛3月30日 小组赛A组 OpTic VS OG
2018/03/31 DOTA
Python插件virtualenv搭建虚拟环境
2017/11/20 Python
Python lambda表达式用法实例分析
2018/12/25 Python
python实现词法分析器
2019/01/31 Python
python+selenium+Chrome options参数的使用
2020/03/18 Python
python 实现PIL模块在图片画线写字
2020/05/16 Python
css3实现冲击波效果的示例代码
2018/01/11 HTML / CSS
ProBikeKit新西兰:自行车套件,跑步和铁人三项装备
2017/04/05 全球购物
美体小铺奥地利官方网站:The Body Shop奥地利
2019/04/11 全球购物
Seavenger官网:潜水服、浮潜、靴子和袜子
2020/03/05 全球购物
C#笔试题和英文面试题
2013/02/07 面试题
请说出这段代码执行后a和b的值分别是多少
2015/03/28 面试题
商场客服专员岗位职责
2014/06/13 职场文书
2015年端午节活动方案
2015/05/05 职场文书
大学生团日活动总结
2015/05/06 职场文书
学习焦裕禄观后感
2015/06/09 职场文书
公共场所卫生管理制度
2015/08/05 职场文书
小学生法制教育心得体会
2016/01/14 职场文书
安装配置mysql及Navicat prenium的详细流程
2021/06/10 MySQL