我听到过关于这个主题的不同反应,那么什么是破坏PHP会话的可靠方法呢?
session_start(); if(isset($_SESSION['foo'])) { unset($_SESSION['foo']; ... } session_destroy();
在最简单的情况下,这是否足以真正终止用户和服务器之间的会话?
要销毁会话,您应该执行以下步骤:
删除会话数据
使会话ID无效
要做到这一点,我会用这个:
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(); }