会话ID重复
问题描述:
由于某些原因,当我第一次使用CMS登录然后注销然后重新登录时,它不会创建新的session_id。它想要在注销之前使用相同的session_id。任何想法,为什么会这样?会话ID重复
这是我的注销页面:
<?php
// Access the existing session
session_start();
// Delete the session variable
unset($_SESSION);
// Destroy the session data:
session_destroy();
// Redirects to the login page
header ('Location: login.php');
?>
答
如果你第一次加载页面,你没有任何包含sessionid的cookie,所以服务器创建一个新的并将它发送给你。如果您注销cookie,则仍然存在,因此,当您重新登录到服务器时,会从cookie中获取sessionid并且不会创建新的cookie。所以你保留你的sessionid。这不是很安全。 CMS或你应该做的是在用户名和密码被检查后立即调用session_regenerate_id()。这样你也可以防止session fixation
答
你可能会取消设置一些会话变量(那些让你知道,如果用户登录,他们的用户ID是什么),但你忘了作为注销过程的一部分,请拨打session_destroy()
。
更新:看来你正在销毁会话状态正确,但你没有重置会话cookie。上面的链接页面说明了你需要做什么并提供了示例代码。
session_destroy基本上做'$ _SESSION = array()'而不是其他的。它不会删除会话cookie。你必须通过'setcookie()'自己做。只要该会话cookie本身处于浮动状态,就会继续获得相同的会话ID。 –