当用户退出时,我可能无法正确删除PHP会话。我注意到,如果我退出并在不关闭浏览器的情况下重新登录,则会话ID不会更改,但如果我退出,请关闭浏览器窗口,打开一个新窗口并登录,会话ID将不同。我需要做一些不同的事情,还是这种正常行为?我已经使用相同的过程三年,但最近发生的事情让我觉得也许我需要做一些与众不同的事情。
以下是当有人点击退出时我基本上做的事情。
<?php
session_start();
if( isSet($_SESSION['FacID']) )
$facID = $_SESSION['FacID']; //Want to re-instate this after we destroy the session.
unset($_SESSION);
session_destroy();
if( isSet($_SESSION['FacID']) )
$_SESSION['FacID'] = $facID;
?>
答案 0 :(得分:5)
如果您觉得需要强制使用新ID http://pl.php.net/manual/en/function.session-regenerate-id.php
关于你的问题,请参阅手册:
session_destroy()会破坏所有的 与当前相关的数据 会话。它没有取消任何一个 与...相关的全局变量 会话,或取消设置会话cookie。 要再次使用会话变量, 必须调用session_start()。
为了杀死会话 总而言之,喜欢将用户注销, 会话ID也必须取消设置。如果 一个cookie用于传播 会话ID(默认行为),然后 必须删除会话cookie。 setcookie()可以用于此。
答案 1 :(得分:1)
你的会话被破坏了。
如果浏览器没有指定会话ID,PHP将只生成会话ID。只要会议被破坏,就没有问题。
答案 2 :(得分:0)
什么是大规模的拯救和破坏?只需session_start
并设置您的变量。无需销毁,然后重置它们!
浏览器的“问题”是当您关闭浏览器窗口时,浏览器正在删除PHP发送的cookie,因此它知道会话ID。这是一个浏览器选项,无法在服务器端更改(除非您利用)。可以使用某些方法规避它,但这可能不是您的最佳选择。