【问题标题】:Don't understand this isset behavior不理解这种 isset 行为
【发布时间】:2014-07-11 14:21:12
【问题描述】:

简单,我不明白为什么关闭会话并以不同的用户打开时它不进入 IF 内部。

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

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

【问题讨论】:

  • 定义关闭会话
  • 你在注销时正在做什么来破坏会话并且关闭浏览器可能不会破坏会话。
  • 你应该更详细地解释你的问题到底是什么。人们仍然认为您的会话没有被创建 insetad 没有被破坏。否则他们会继续投票错误的答案。
  • 哦,如果您的会话如您所愿被破坏,您也将拥有 MM_Username。所以这里可能会发生更多事情。

标签: php mysql session


【解决方案1】:

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

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

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

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

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

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

【讨论】:

  • 没有 OP 声明他有一个会话。问题在于摧毁它,而不是让它发挥作用!
  • @ToBe 嗯,似乎很容易 - 但我进行了编辑并涵盖了您所做的这一点 - 这是有效的:) tips hat
  • 我在所有页面中都有 session_start(),但 logout.php 文件中没有 session_destroy()。我想你说的都有道理,但仍然不明白为什么在更改为其他会话甚至关闭浏览器之后为 (SESSION['Username']) 设置了数据。这不是我读到的关于 SESSION 变量工作方式的内容。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    $_SESSION = array();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-20
      • 1970-01-01
      • 2012-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多