2011-09-06 94 views
0

由于某些原因,当我第一次使用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'); 

?> 
+1

session_destroy基本上做'$ _SESSION = array()'而不是其他的。它不会删除会话cookie。你必须通过'setcookie()'自己做。只要该会话cookie本身处于浮动状态,就会继续获得相同的会话ID。 –

回答

2

如果你第一次加载页面,你没有任何包含sessionid的cookie,所以服务器创建一个新的并将它发送给你。如果您注销cookie,则仍然存在,因此,当您重新登录到服务器时,会从cookie中获取sessionid并且不会创建新的cookie。所以你保留你的sessionid。这不是很安全。 CMS或你应该做的是在用户名和密码被检查后立即调用session_regenerate_id()。这样你也可以防止session fixation

1

你可能会取消设置一些会话变量(那些让你知道,如果用户登录,他们的用户ID是什么),但你忘了作为注销过程的一部分,请拨打session_destroy()

更新:看来你正在销毁会话状态正确,但你没有重置会话cookie。上面的链接页面说明了你需要做什么并提供了示例代码。

+0

我使用我的注销页面的代码更新了我的帖子。 –

+1

@JeffDavidson:查看更新 - “session_destroy”的文档显示了您需要执行的操作。 – Jon

+1

要引用您链接到的页面。它不会...取消设置会话cookie。 – Gerben