热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

使用Redis存储Session,如果只设置一个值就无法删除

使用Redis存储Session,如果只设置一个值就无法删除:如图所示,执行unset($_SESSION[name])是无法删除的;只有在有多个session,并且name不在首

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

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


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

_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);

代码有什么问题吗?

回复内容:

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

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


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

_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);

代码有什么问题吗?

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

推荐阅读
  • 优化Flask应用的并发处理:解决Mysql连接过多问题
    本文探讨了在Flask应用中通过优化后端架构来应对高并发请求,特别是针对Mysql 'too many connections' 错误的解决方案。我们将介绍如何利用Redis缓存、Gunicorn多进程和Celery异步任务队列来提升系统的性能和稳定性。 ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 本文作者分享了在阿里巴巴获得实习offer的经历,包括五轮面试的详细内容和经验总结。其中四轮为技术面试,一轮为HR面试,涵盖了大量的Java技术和项目实践经验。 ... [详细]
  • 解决Windows 10开机频繁自检问题的实用方法
    许多用户在使用Windows 10系统时,经常会遇到开机时自动进行磁盘检查的情况。这不仅影响了开机速度,还可能带来不必要的麻烦。本文将详细介绍如何通过简单的注册表修改来避免每次开机时的磁盘自检,提升系统启动效率。 ... [详细]
  • 本文详细介绍了在使用 SmartUpload 组件进行文件上传时,如何正确配置和查找文件保存路径。通过具体的代码示例和步骤说明,帮助开发者快速解决上传路径配置的问题。 ... [详细]
  • Python + Pytest 接口自动化测试中 Token 关联登录的实现方法
    本文将深入探讨 Python 和 Pytest 在接口自动化测试中如何实现 Token 关联登录,内容详尽、逻辑清晰,旨在帮助读者掌握这一关键技能。 ... [详细]
  • 本文探讨了在Django项目中,如何在对象详情页面添加前后导航链接,以提升用户体验。文章详细描述了遇到的问题及解决方案。 ... [详细]
  • 本文探讨了在 SQL Server 中使用 JDBC 插入数据时遇到的问题。通过详细分析代码和数据库配置,提供了解决方案并解释了潜在的原因。 ... [详细]
  • CEC2005 F4函数实现中的Bug分析
    本文探讨了在optproblems版本1.2中,CEC2005基准测试包中F4函数的实现问题。根据Suganthan等人的论文,F4函数的高斯部分应取绝对值,但当前实现未遵循这一要求,导致理论最优解并非-450。本文通过代码截图详细说明了这一问题,并提供了进一步的解释。 ... [详细]
  • 本文详细介绍如何使用 Apache Spark 执行基本任务,包括启动 Spark Shell、运行示例程序以及编写简单的 WordCount 程序。同时提供了参数配置的注意事项和优化建议。 ... [详细]
  • CentOS 6.8 上安装 Oracle 10.2.0.1 的常见问题及解决方案
    本文记录了在 CentOS 6.8 系统上安装 Oracle 10.2.0.1 数据库时遇到的问题及解决方法,包括依赖库缺失、操作系统版本不兼容、用户权限不足等问题。 ... [详细]
  • Django Token 认证详解与 HTTP 401、403 状态码的区别
    本文详细介绍了如何在 Django 中配置和使用 Token 认证,并解释了 HTTP 401 和 HTTP 403 状态码的区别。通过具体的代码示例,帮助开发者理解认证机制及权限控制。 ... [详细]
  • 本文介绍了如何利用TensorFlow框架构建一个简单的非线性回归模型。通过生成200个随机数据点进行训练,模型能够学习并预测这些数据点的非线性关系。 ... [详细]
  • 本文介绍如何配置SecureCRT以正确显示Linux终端的颜色,并解决中文显示问题。通过简单的步骤设置,可以显著提升使用体验。 ... [详细]
  • 深入浅出TensorFlow数据读写机制
    本文详细介绍TensorFlow中的数据读写操作,包括TFRecord文件的创建与读取,以及数据集(dataset)的相关概念和使用方法。 ... [详细]
author-avatar
D调肥仔
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有