使用redis存储session


        准备工作参考以前的博客安装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;  // todo php7 此处应改为 is_string($data) ? $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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值