我对如何使用$_SESSION
变量感到困惑。到目前为止,我学会了它用于存储临时数据,例如,如果用户登录,我可以设置一些会话变量,以便能够告诉他/她已登录。现在我的问题是:我应该为每个用户创建一个会话当用户注销时将其销毁或仅为所有用户使用一个会话?
我有这个疑问,因为我找到了这个"指导线" http://www.wikihow.com/Create-a-Secure-Login-Script-in-PHP-and-MySQL并注销他们所做的用户:
include_once 'functions.php';
sec_session_start();
// Unset all session values
$_SESSION = array();
// get session parameters
$params = session_get_cookie_params();
// Delete the actual cookie.
setcookie(session_name(),
'', time() - 42000,
$params["path"],
$params["domain"],
$params["secure"],
$params["httponly"]);
// Destroy session
session_destroy();
header('Location: ../index.php');
但是,此代码是否删除了存储在$_SESSION
变量中的所有值,因此所有其他用户都会登录?
答案 0 :(得分:1)
您网站上的每个用户(浏览器用户)都会获得自己的会话,因此会对自己的$ _SESSION变量进行排序。
您可以在您的网站上查看您的cookie,通常有一个名为PHPSESSID的名称,每个用户/浏览器都有一个唯一的标识符。会话数据存储在服务器上,只有当您拥有正确的会话ID时,才能获得$ _SESSION var中的值。
现在,如果您为一个用户仅销毁此变量,他的数据就会消失,所有其他用户的数据仍然存在且可供他们访问。
答案 1 :(得分:0)
当用户登录或注销时(或任何时候他们的auth *级别确实发生变化),使用session_regenrate_id(true);
调用是一种很好的做法。这将使用新ID重新启动会话并复制所有内容。如果攻击者碰巧通过另一个未登录的站点中的XSS将其cookie拉出来,这可以帮助防止会话固定。
此外,如果您只能使用" HTTP"那么它是最好的。如果您运行HTTPS站点,也可以使用Cookie和HTTPS(安全)。