当前位置:首页 > CMS教程 > Thinkphp > 列表

ThinkPHP自定义Redis处理SESSION的实现方法

发布:smiling 来源: PHP粉丝网  添加日期:2021-08-06 09:53:14 浏览: 评论:0 

这篇文章主要介绍了ThinkPHP自定义Redis处理SESSION的实现方法,结合实例形式分析了ThinkPHP相关数据库配置与自定义Redis处理session的实现技巧,需要的朋友可以参考下。

本文实例讲述了ThinkPHP自定义Redis处理SESSION的实现方法,分享给大家供大家参考,具体如下:

日常中我们都会使用到session来保存用户登录的信息,常用的session的保存方式有:文件保存(默认)、数据库保存、Redis保存、memcached等。这里主要记录一下在用ThinkPHP处理session用Redis来保存session的用法。

1.在配置项中定义:

  1. 'SESSION_TYPE' => 'Redis'//session保存类型 
  2. 'SESSION_PREFIX' => 'sess_'//session前缀 
  3. 'REDIS_HOST' => '127.0.0.1' //REDIS服务器地址 
  4. 'REDIS_PORT' => 6379, //REDIS连接端口号 
  5. '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文件

文件内容如下:

  1. <?php 
  2. namespace Think\Session\Driver; 
  3. class Redis { 
  4. //  Redis连接对象 
  5.   private $redis
  6. //  Session过期时间 
  7.   private $expire
  8.   /** 
  9.    * 打开方法 
  10.    * @param type $path 
  11.    * @param type $name 
  12.    * @return type 
  13.    */ 
  14.   public function open($path$name) { 
  15.   $this->expire = C('SESSION_EXPIRE') ? C('SESSION_EXPIRE') : ini_get('session.gc_maxLifetime'); 
  16.   $this->redis = new Redis(); 
  17.   return $this->redis->connect(C('REDIS_HOST'), C('REDIS_PORT')); 
  18.   } 
  19.   /** 
  20.    * 关闭 
  21.    * @return type 
  22.    */ 
  23.   public function close() { 
  24.   return $this->redis->close(); 
  25.   } 
  26.   /** 
  27.    * 读取 
  28.    * @param string $id 
  29.    * @return type 
  30.    */ 
  31.   public function read($id) { 
  32.   $id = C('SESSION_PREFIX') . $id
  33.   $data = $this->redis->get($id); 
  34.   return $data ? $data : ''
  35.   } 
  36.   /** 
  37.    * 写入 
  38.    * @param string $id 
  39.    * @param type $data 
  40.    * @return type 
  41.    */ 
  42.   public function write($id$data) { 
  43.   $id = C('SESSION_PREFIX') . $id
  44.   return $this->redis->set($id$data$this->expire); 
  45.   } 
  46.   /** 
  47.    * 销毁 
  48.    * @param string $id 
  49.    */ 
  50.   public function destroy($id) { 
  51.   $id = C('SESSION_PREFIX') . $id
  52.   $this->redis->delete($id); 
  53.   } 
  54.   /** 
  55.    * 垃圾回收 
  56.    * @param type $maxLifeTime 
  57.    * @return boolean 
  58.    */ 
  59.   public function gc($maxLifeTime) { 
  60.   return true; 
  61.   } 

至此就完成了Redis对session的处理。

memcached的方法和Redis差不多一样!

Tags: ThinkPHP Redis SESSION

分享到: