如何验证旧会话是否真的被破坏?

时间:2010-04-27 06:50:06

标签: php session

嗯,这可能听起来有点奇怪。我们在特定条件下遇到一些特定浏览器的问题,最后将问题缩小到我们在执行session_regenerate_id()之后没有正确销毁旧会话这一事实。我相信我现在通过执行session_regenerate_id(true)解决了这个问题,但是如何验证先前的会话是否真的不存在?有人建议使用cURL,但我无法找到他们的文档。可悲的是,(?)老板不接受'它只是有效'的答案,所以我真的很感激任何建议!

2 个答案:

答案 0 :(得分:4)

默认情况下,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

答案 1 :(得分:1)

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

或者,如果这是一个关键信息,您可能需要构建自己的会话后端(这一点并不困难)以获得更多控制权和更多调试选项(您手动销毁数据并且您可以添加日志记录语句来证明数据已被删除。)

见这里:http://php.net/manual/en/function.session-set-save-handler.php

或者在这里:http://devzone.zend.com/article/141