php - 使用Redis存储Session,如果只设置一个值就无法删除
大家讲道理
大家讲道理 2017-04-10 16:48:20
[PHP讨论组]

如图所示,执行unset($_SESSION['name'])是无法删除的;
只有在有多个session,并且name不在首位才能被删除,在首位的session都不能被删除。请问这个情况大家遇到吗?

我在线上和线下都试过,无法解决


找到问题所在了,是由于我改写了session_set_save_handler()方法:

<?php
/**
 * Session Redis存贮
 * @version            v1.0
 * @author             Lay
 */
class Session_Redis extends Session {
    /**
     * @var string 键前缀
     */
    const CACHE_KEY = 'SESSION:';

    /**
     * @var object 数据库对象
     */
    private $_cache = null;

    /**
     * 开始Session
     *
     * @return void
     */
    public function __construct($cache) {
        $this->_cache = $cache;
        $this->_lifetime = ini_get('session.gc_maxlifetime');
        session_set_save_handler(
            array($this, '_open'),
            array($this, '_close'),
            array($this, '_read'),
            array($this, '_write'),
            array($this, '_destroy'),
            array($this, '_gc')
        );
    }

    // _open
    public function _open($savePath, $name) {
        return true;
    }

    // _close
    public function _close() {
        $this->_gc($this->_lifetime);
        return true;
    }

    // _read
    public function _read($id) {
        $res = $this->_cache->get(self::CACHE_KEY . $id, FALSE);
        return $res ? $res : '';
    }

    // _write
    public function _write($id, $value) {
        if ($value) {
            $flag = $this->_cache->set(self::CACHE_KEY . $id, $value, intval($this->_lifetime), FALSE);
            return $flag;
        } else {
            return FALSE;
        }
    }

    // _destroy
    public function _destroy($id) {
        $flag = $this->_cache->delete(self::CACHE_KEY . $id);
        return $flag;
    }

    // _gc
    public function _gc($lifetime) {
    }
}

调用:

$cache = load_cache(); // 返回Redis对象
$handle = new Session_Redis($cache);

代码有什么问题吗?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(1)
迷茫

没有遇到过,你确认下是不是被重新生成了,可以unset($_SESSION['name'])以后,给$_SESSION['name']重新赋值试试。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号