使用redis存储session

来源:互联网 发布:媒体姓党 魂归大海知乎 编辑:程序博客网 时间:2024/05/13 20:59


        准备工作参考以前的博客安装redis、安装phpredis。


        具体代码

ini_set('session.save_handler', 'redis');ini_set('session.save_path', 'tcp://127.0.0.1:6379');session_start();$_SESSION['sessionid'] = 'this is session content!';echo $_SESSION['sessionid'] . "\n";

        在命令行上运行此脚本后,会打印


        进入到redis,输入图中命令也能发现session数据已存入


        若是redis配置了密码,只需'tcp://127.0.0.1:6379?auth=authpwd'(注:authpwd为redis密码),尤其要注意的是要查看phpredis的版本,版本低的话会报错,我的就报了“Warning: Unknown: Failed to write session data (redis). Please verify that the current setting of session.save_path is correct (tcp://127.0.0.1:6379?auth=test) in Unknown on line 0”,后来升级了之后便好了。


        [updated] 自定义redis的session类

class Redis_Session implements SessionHandlerInterface{    private $handle;    private $lifetime;    private $prefix = 'TESTSID:';    /**     * open session     * @param string $save_path     * @param string $session_name     * @return bool     */    public function open($save_path, $session_name)    {        $this->handle = new redis;        $this->handle->connect('127.0.0.1', '6379');        $this->lifetime = ini_get('session.gc_maxlifetime');        return true;    }    /**     * close session     * @return bool     */    public function close()    {        $this->gc($this->lifetime);        $this->handle->close();        $this->handle = null;        return true;    }    /**     * read session by session_id     * @param string $session_id     * @return mixed     */    public function read($session_id)    {        $session_id = $this->prefix . $session_id;        $data = $this->handle->get($session_id);        $this->handle->expire($session_id, $this->lifetime);        return $data;    }    /**     * write session by session_id     * @param string $session_id     * @param string $session_data     * @return mixed     */    public function write($session_id, $session_data)    {        $session_id = $this->prefix . $session_id;        $this->handle->set($session_id, $session_data);        return $this->handle->expire($session_id, $this->lifetime);    }    /**     * delete session_id     * @param string $session_id     * @return mixed     */    public function destroy($session_id)    {        return $this->handle->rm($this->prefix . $session_id);    }    /**     * this function is no use because of redis expire     * @param int $maxlifetime     * @return bool     */    public function gc($maxlifetime)    {        return true;    }}$handler = new Redis_Session();session_set_save_handler($handler, true);session_start();$_SESSION['id'] = 1;echo $_SESSION['id'];



0 0
原创粉丝点击