嗯,这可能听起来有点奇怪。我们在特定的条件下遇到了特定浏览器的问题,并最终缩小了问题的范围,因为在执行session_regenerate_id()之后我们没有正确销毁旧会话。我相信我现在通过执行session_regenerate_id(true)来解决这个问题,但是如何验证之前的会话是否真的不再存在?有人建议cURL,但我找不到他们的文档。可悲的是(?)老板不接受'它只是作品'的答案,所以我非常感谢任何建议!如何验证旧会话是否真的被破坏?
回答
默认情况下session_regenerate_id();
将只更换一个新的当前会话。所以旧的会话文件不需要真正被删除。 但是做一个session_regenerate_id(true);
将删除旧的会话文件。 (http://php.net/session_regenerate_id)
要检查是否旧会话被删除,你可以做这样的事情
<?php
$file=ini_get('session.save_path')."/sess_".session_id();
$gotDeleted = file_exists($file);
?>
你也可以做一个session_destroy()
。如果你必须保留一些变量,你可以尝试unset()
对特定的$_SESSION
值。
是的,在大多数情况下都是如此,但在某些特殊情况下,它不会起作用。特别是在代码中使用session_name(“WHATEVERNAMESESSID”)时。您无法移除它。会话仍然存在,直到浏览器(firefox)关闭。很奇怪! – B4NZ41 2013-07-09 19:39:17
为了确保会话数据消失,您应该查看保存后端的会话。默认情况下,它将会话存储为普通磁盘文件(这就是为什么会话在apache重新启动时仍然存在的原因)。您可能希望查看它们,并检查与您正在观察的会话相对应的一个是否已被有效删除。或者,如果这是一个重要信息,您可能想要构建自己的会话后端(这并不难),以便拥有更多的控制权和更多的调试选项(您可以手动销毁数据并您可以添加日志记录语句来证明数据已被删除)。
在这里看到:http://php.net/manual/en/function.session-set-save-handler.php
- 1. 会话变量被破坏
- 2. TokBox会话被破坏
- 3. 内存是否会被破坏?
- 4. 奇怪的错误会话被破坏
- 5. 会话被破坏掉了PHP
- 6. 会话不破坏
- 7. 破坏前验证
- 8. 破坏特定会话的会话Funda
- 9. 新的PHPMailer()破坏会话
- 10. 如何验证矢量是否真的被恢复?
- 11. J2ME的Integer.parseInt()是否被破坏?
- 12. 刷新页面是否会破坏PHP会话?
- 13. 无法破坏铬会话
- 14. PHP会话和cookie破坏
- 15. 使用CakePHP破坏会话
- 16. 验证单元测试中的交互是否破坏封装?
- 17. z80分割算法是否被破坏?
- 18. ScriptIntrinsicYuvToRGB或YUV420分配是否被破坏?
- 19. Java断言是否被破坏?
- 20. Visual Studio recursive_directory_iterator.pop()是否被破坏?
- 21. 内容协商是否被破坏?
- 22. 找出WebView是否已被破坏
- 23. 破坏骨干视图是否会破坏它?
- 24. 会话是否用于REST验证?
- 25. 如何检测视图的父级活动是否被破坏
- 26. 会话在注销时不会被破坏?
- 27. 如何验证会话中的列表是否为空? JSP
- 28. 注销不会破坏会话
- 29. 如何检测图像路径是否被破坏?
- 30. 如何确定Rails对象是否被标记为要破坏?
看起来像这样的人往往upvote他们不明白的问题。 “会话”下的意思是什么?什么材料很重要?你为什么如此确定你真的缩小了这个问题? – 2010-04-27 07:02:23