真正破坏 PHP 会话?
我听到了关于这个主题的混合反应,那么摧毁PHP会话的可靠方法是什么?
session_start();
if(isset($_SESSION['foo'])) {
unset($_SESSION['foo'];
...
}
session_destroy();
在最简单的情况下,这是否足以真正终止用户和服务器之间的会话?
我听到了关于这个主题的混合反应,那么摧毁PHP会话的可靠方法是什么?
session_start();
if(isset($_SESSION['foo'])) {
unset($_SESSION['foo'];
...
}
session_destroy();
在最简单的情况下,这是否足以真正终止用户和服务器之间的会话?
要销毁会话,应执行以下步骤:
为此,我将使用以下命令:
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();
}
PHP 手册解决了这个问题。
您需要终止会话并删除会话 Cookie(如果您使用的是 Cookie)。
请参阅此页面(尤其是第一个示例):