我听到了有关这个主题的混合回复,那么什么是一个可靠的方法来销毁PHP会话?真正销毁PHP会话?
session_start();
if(isset($_SESSION['foo'])) {
unset($_SESSION['foo'];
...
}
session_destroy();
在最简单的情况下,是否足以真正终止用户和服务器之间的会话?
我听到了有关这个主题的混合回复,那么什么是一个可靠的方法来销毁PHP会话?真正销毁PHP会话?
session_start();
if(isset($_SESSION['foo'])) {
unset($_SESSION['foo'];
...
}
session_destroy();
在最简单的情况下,是否足以真正终止用户和服务器之间的会话?
要摧毁你应采取以下步骤会话:
要做到这一点,我'd use this:
session_start();
// resets the session data for the rest of the runtime
$_SESSION = array();
// sends as Set-Cookie to invalidate the session cookie
if (isset($_COOKIE[session_name()])) {
$params = session_get_cookie_params();
setcookie(session_name(), '', 1, $params['path'], $params['domain'], $params['secure'], isset($params['httponly']));
}
session_destroy();
为了确保会话ID无效,您应该只允许由您的脚本启动的会话ID。所以,设置一个标志并检查是否设置:
session_start();
if (!isset($_SESSION['CREATED'])) {
// invalidate old session data and ID
session_regenerate_id(true);
$_SESSION['CREATED'] = time();
}
此外,您可以使用此时间戳来交换会话ID周期性地降低其使用寿命:
if (time() - $_SESSION['CREATED'] > ini_get('session.gc_maxlifetime')) {
session_regenerate_id(true);
$_SESSION['CREATED'] = time();
}
很好的反馈,谢谢你。 – 2009-02-03 21:59:29
在我使用PHP会话的一个站点中,我从来没有真正销毁会话。
问题是,你几乎不得不打电话给session_start()
来检查你的$_SESSION
变量,在这一点上,你瞧,你已经创建了另一个会话。
因此在我的地盘我只是确信每页面调用session_start()
,然后就unset()
这个问题,当用户注销会话状态的那些部分。
感谢您输入Alnitak,这是我怀疑在每个页面上调用session_start()。我将继续使用它们来取消设置变量。 – 2009-02-03 21:46:04
PHP手册解决了这个问题。
您需要终止会话并删除会话cookie(如果您使用的是cookie)。
看到这个页面(尤其是第一个例子):
看一看点击:http:/ /stackoverflow.com/questions/10648565/destroying-php-session/10662060#10662060 – Brett 2012-05-20 06:38:28