不明白这种行为

时间:2014-05-22 13:42:17

标签: php mysql session

很简单,我不明白为什么在关闭会话并向其他用户开放时它不会进入IF内部。

if (!isset($_SESSION['Username'])) {
  $_SESSION['Username'] = $_SESSION['MM_Username'];
}

即使我退出,也只在第一次工作并保持相同的名称。我也关闭了浏览器,我总是得到同样的名字。我认为$_SESSION['Username']会在会议结束后被销毁。

3 个答案:

答案 0 :(得分:4)

您发布的代码未启动会话:

session_start();
if (!isset($_SESSION['Username'])) {
  $_SESSION['Username'] = $_SESSION['MM_Username'];
}

您需要告诉apache使用session_start启动会话变量,否则您无法访问其中的任何内容。

此外,从内存中,您需要在脚本顶部发布此内容(在将任何数据发送给用户之前) - 尽管这可能无关紧要,但我现在无法回想起来。如果该陈述不正确,请编辑:)

编辑:如果你已经得到了它并且它正在运行,那么在将用户注销时应使用session_destroy以确保从会话中删除任何数据。这意味着你不必担心关闭浏览器或类似的东西:

// your logout script... and
session_destroy();

答案 1 :(得分:1)

如果您想确保在用户退出时会话结束,请使用http://php.net/manual/en/function.session-destroy.php 如果您假设会话将在一定时间后或用户关闭浏览器选项卡时结束,则可能会出现意外结果。

答案 2 :(得分:0)

如果要取消设置所有$ _SESSION变量,可以执行以下操作:

$_SESSION = array();