2015-10-28 27 views
1

我用笨3我的项目,我想使用Redis的存储会话 与我可以用笨和Redis的存储会话

我安装的Redis的NodeJS和mysql的实时通知系统使用我的服务器上测试它与的NodeJS是工作好

+0

简短的回答是 '是'。有一个PHP库,你会需要,但除此之外,你应该罚款。 – Jerry

回答

0

我不知道,如果你还在寻找答案(能帮助别人也是如此),但这里的解释序列化和反序列化一个很好的链接(https://simplapi.wordpress.com/2012/04/13/php-and-node-js-session-share-redi/) 会话数据为json。我已经在Codeigniter的库Session_redis_driver.php中进行了修改,以便编码和解码,因此我可以在Nodejs中使用它。如果有人能验证此代码并指出任何陷阱或未处理的异常,我会很高兴。

  1. 修改在 “读” 方法

    public function read($session_id) 
    { 
    if (isset($this->_redis) && $this->_get_lock($session_id)) 
    { 
        // Needed by write() to detect session_regenerate_id() calls 
        $this->_session_id = $session_id; 
    
        $session_data = json_decode($this->_redis->get($this->_key_prefix.$session_id),TRUE); 
    
        is_array($session_data) 
         ? $this->_key_exists = TRUE 
         : $session_data = ''; 
    
        $this->_fingerprint = md5(json_encode($session_data)); 
           $tmp = $_SESSION; 
           $_SESSION = $session_data; 
           $new_data = session_encode(); 
           $_SESSION = $tmp; 
        return $new_data; 
    } 
    
    return $this->_fail(); 
    } 
    

到目前为止,这是工作无异常。

  1. 在写入方法中进行了以下更改。

    if (isset($this->_lock_key)) 
    { 
        $this->_redis->setTimeout($this->_lock_key, 300); 
           $tmp = $_SESSION; 
           session_decode($session_data); 
           $new_data = $_SESSION; 
           $_SESSION = $tmp; 
        if ($this->_fingerprint !== ($fingerprint = md5(json_encode($new_data))) OR $this->_key_exists === FALSE) 
        { 
         if ($this->_redis->set($this->_key_prefix.$session_id, json_encode($new_data), $this->_config['expiration'])) 
         { 
          $this->_fingerprint = $fingerprint; 
          $this->_key_exists = TRUE; 
          return $this->_success; 
         } 
    
         return $this->_fail(); 
        } 
    
        return ($this->_redis->setTimeout($this->_key_prefix.$session_id, $this->_config['expiration'])) 
         ? $this->_success 
         : $this->_fail(); 
    } 
    
相关问题