Php Don';我不理解这种行为

Php Don';我不理解这种行为,php,mysql,session,Php,Mysql,Session,很简单,我不明白为什么当关闭会话并与其他用户打开时,它不进入IF if (!isset($_SESSION['Username'])) { $_SESSION['Username'] = $_SESSION['MM_Username']; } 仅在第一次使用时有效,即使我注销,也会使用相同的名称。我也关闭了浏览器,我总是得到相同的名字。我认为,$\u会话['Username']将在关闭会话后被销毁。如果要取消设置所有$\u会话变量,可以执行以下操作: $_SESSION = array()

很简单,我不明白为什么当关闭会话并与其他用户打开时,它不进入IF

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

仅在第一次使用时有效,即使我注销,也会使用相同的名称。我也关闭了浏览器,我总是得到相同的名字。我认为,
$\u会话['Username']
将在关闭会话后被销毁。

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

$_SESSION = array();

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

session_start();
if (!isset($_SESSION['Username'])) {
  $_SESSION['Username'] = $_SESSION['MM_Username'];
}
您需要告诉apache使用启动会话变量,否则无法访问其中的任何内容

此外,从内存中,您需要将此内容发布在脚本的顶部(在向用户发送任何数据之前)——尽管这可能无关紧要,但我现在记不起来了。如果该语句不正确,请编辑:)

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

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

如果要确保会话在用户注销时结束,请使用。

如果假定会话将在一定时间后结束,或者当用户关闭浏览器选项卡时,可能会出现意外结果

定义关闭会话注销时,您在销毁会话时做什么?关闭浏览器可能不会销毁会话。您应该更详细地解释问题所在。人们仍然认为你的会话没有被创建,也没有被破坏。否则他们会继续投票给错误的答案。哦,如果你的会话像你希望的那样被破坏,你也会有MM_用户名。所以这里可能会有更多的事情发生。OP没有声明他有一个会话。问题是破坏它,而不是让它工作@嗯,看起来很简单,但我做了一个编辑,涵盖了你提出的观点,这是有效的:)tips hatI在所有页面中都有session_start(),但在logout.php文件中没有session_destroy()。我想你说的都有道理,但还是不明白为什么在切换到其他会话甚至关闭浏览器后(会话['Username'])会设置数据。我读到的不是会话变量的工作方式。