美文网首页
PHP自定义SESSION保存到REDIS中

PHP自定义SESSION保存到REDIS中

作者: 为啥这么有钱 | 来源:发表于2019-10-07 12:11 被阅读0次

工作中经常遇到,多台机器登录的问题, 这里的解决方案就是保存到memcache,或者redis中。

<?php
class Session implements SessionHandlerInterface
{
    private static $lifetime = null;//session周期
    private static $domain = null;//当前域名
    
    private static function init()
    {
        self::$lifetime = ini_get('session.gc_maxlifetime') ? ini_get('session.gc_maxlifetime') : 1800;
        self::$domain = 'xxxx';
    }
    
    public static function start()
    {
        self::init();
        //多主机共享保存 SESSION ID 的 COOKIE,
        //        ini_set('session.cookie_domain', self::$_domain);
        //将 session.save_handler 设置为 redis,而不是默认的 files
        session_module_name('redis');
        $obj = new Com_Session();
        session_set_save_handler(
            array(&$obj, 'open'),
            array(&$obj, 'close'),
            array(&$obj, 'read'),
            array(&$obj, 'write'),
            array(&$obj, 'destroy'),
            array(&$obj, 'gc'));
        // 下面这行代码可以防止使用对象作为会话保存管理器时可能引发的非预期行为
        register_shutdown_function('session_write_close');
        session_start();
    }
    
    public function open($savePath, $sessionName)
    {
        return true;
    }
    
    public function close()
    {
        return true;
    }
    
    public function read($sessionId)
    {
        if (!$sessionId) return '';
        //重redis获取值
        $res = Libs_Cache_Redis::get($sessionId);
        return $res ? unserialize($res) : '';
    }
    
    public function write($sessionId, $data)
    {
        if (!$sessionId) return '';
         //自定义的设置redis方法
        $res = Libs_Cache_Redis::set($sessionId, serialize($data), self::$lifetime);
        return $res ? $res : '';
    }
    
    public function destroy($sessionId)
    {
        if (!$sessionId) return '';
        //这里是自定义Redis类的删除
        $res = Libs_Cache_Redis::delete($sessionId);
        return $res ? $res : '';
    }
    
    public function gc($maxlifetime)
    {
        return true;
    }
}

相关文章

网友评论

      本文标题:PHP自定义SESSION保存到REDIS中

      本文链接:https://www.haomeiwen.com/subject/jsjmuctx.html