最新消息: 新版网站上线了!!!

ThinkPHP自定义SESSION处理之Redis

日常中我们都会使用到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文件

文件内容如下:
 

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

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

 

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

转载请注明:谷谷点程序 » ThinkPHP自定义SESSION处理之Redis