花了我一段时间来解决这个问题的确切原因,但这似乎正在发生:
我开会。我想彻底取消我的当前会话,并从头开始,使用一个全新的会话,该会话具有空白状态。
所以这就是我要做的:
public function unregister_session()
{
// I COMMENTED THOSE SECTIONS THAT I WASNT SURE WHAT THEY WERE DOING, BUT PROBLEM PERSISTS.
//session_regenerate_id();
//$params = session_get_cookie_params();
// setcookie(session_name(), '', time() - 42000,
// $params["path"], $params["domain"],
// $params["secure"], $params["httponly"]);
unset($_SESSION);
$_SESSION=array();
echo '<br> destroying session. old SID:'.session_id(); //echos 'qqhu7on0n...'
session_unset();
session_destroy();
echo '<br> limbo SID:'.session_id(); //echos nothing.
session_start();
echo '<br> new SID:'.session_id(); //echos 'qqhu7on0n...'
}
好了,所以我认为应该进行的是新的会议。而且这很好,因为至少在我看来,关于上一届会议的所有事情似乎都被遗忘了$_SESSION
。
但是,每当我回显session_id时,它仍然为我提供旧的会话ID!当我将任何值写入$ _SESSION时,它们不会被带到下一页,而是在下一页$_SESSION
为空!
编辑:我在我脚本的多个位置(从上到下)回显session_id(),我总是显示相同的session_id。进入Google开发人员工具查看我的Cookie时,我看到了PHPSESSID的另一个ID。当我尝试在下一页上回显session_id()时,我会看到确切的ID ...
为什么会发生这种情况,我在做什么错呢?如何获取session_id()向我显示新的会话ID,而不是旧的ID?如何将值写入NEW $ _SESSION变量,以便将其实际带到下一页?
编辑-解决方案
public function unregister_session()
{
// DUNNO IF THE COMMENTED SECTIONS MAKE A DIFFERENCE
//$params = session_get_cookie_params();
// setcookie(session_name(), '', time() - 42000,
// $params["path"], $params["domain"],
// $params["secure"], $params["httponly"]);
unset($_SESSION);
$_SESSION=array();
echo '<br> destroying session. old SID:'.session_id(); //echos 'qqhu7on0n...'
session_unset();
session_destroy();
echo '<br> limbo SID:'.session_id(); //echos nothing.
session_start();
session_regenerate_id(TRUE); //THIS DOES THE TRICK! Calling it after session_start. Dunno if true makes a difference.
echo '<br> new SID:'.session_id(); //echos '7b2jn...' :-)
}
结帐,http://php.net/manual/en/function.session-regenerate-id.php
session_regenerate_id()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句