Php 如何验证旧会话是否确实已被销毁?

Php 如何验证旧会话是否确实已被销毁?,php,session,Php,Session,嗯,这听起来可能有点奇怪。我们在一个非常特定的条件下使用特定的浏览器时遇到了一些问题,最后我们将问题缩小到这样一个事实:在执行session_regenate_id()之后,我们没有正确地销毁旧会话。我相信我现在通过执行session_regenate_id(true)解决了这个问题,但是如何验证以前的session真的不再存在?有人建议卷发,但我找不到绕过他们医生的方法。可悲的是(?)老板不接受“它只是工作”的答案,所以我真的很感激任何建议 为了确保会话数据已丢失,您应该查看会话保存后端。默认

嗯,这听起来可能有点奇怪。我们在一个非常特定的条件下使用特定的浏览器时遇到了一些问题,最后我们将问题缩小到这样一个事实:在执行session_regenate_id()之后,我们没有正确地销毁旧会话。我相信我现在通过执行session_regenate_id(true)解决了这个问题,但是如何验证以前的session真的不再存在?有人建议卷发,但我找不到绕过他们医生的方法。可悲的是(?)老板不接受“它只是工作”的答案,所以我真的很感激任何建议

为了确保会话数据已丢失,您应该查看会话保存后端。默认情况下,它将会话存储为普通磁盘文件(例如,这就是会话在apache重新启动后仍然有效的原因)。您可能希望查看它们,并检查与您正在观察的会话相对应的会话是否已被有效删除

或者,如果这是一个非常关键的信息,您可能希望构建自己的会话后端(这一点都不困难),以便拥有更多的控制和调试选项(您可以手动销毁数据,还可以添加日志记录语句以证明数据已被删除)

请看这里:


或者在这里:

默认情况下
会话\u重新生成\u id()将仅用新会话替换当前会话。因此,旧会话文件实际上不需要删除。
但是执行
会话\u重新生成\u id(true)将删除旧会话文件。()

要检查旧会话是否被删除,可以执行以下操作

<?php
$file=ini_get('session.save_path')."/sess_".session_id();
$gotDeleted = file_exists( $file );
?>


您还可以执行
会话\u destroy()
。如果必须保留一些变量,可以尝试对特定的
$\u会话
值进行
unset()

看起来人们倾向于对他们不理解的问题进行投票。你说的“会话”到底是什么意思?什么材料重要?为什么你这么确定你真的缩小了问题的范围?是的,在大多数情况下这是正确的,但在一些特殊情况下,这是行不通的。特别是当您在代码中使用session_name(“WHATEVERNAMESESSID”)时。你没办法把它拿走。在浏览器(firefox)关闭之前,会话将一直存在。很奇怪!