【问题标题】:Strange $_SESSION behavior奇怪的 $_SESSION 行为
【发布时间】:2013-01-03 22:22:10
【问题描述】:

我的 header.php 中有以下代码,它从 $_SESSION 获取消息并将其显示给用户,我在控制器中设置了“消息”会话变量。

<div id="messages">
    <?php if (isset($_SESSION["message"])):?>
    <span class="message"> <?php echo "message is ".$_SESSION["message"]?>
    </span>
    <?php endif ?>
</div>

这工作正常,消息显示。现在我想从会话中删除“消息”变量,以便仅在一个请求中调用它,所以我添加了行 unset($_SESSION["message"]);在结束之前,所以代码变为:

<div id="messages">
    <?php if (isset($_SESSION["message"])):?>
    <span class="message"> <?php echo "message is ".$_SESSION["message"]?>
    </span>
    <?php 
    unset($_SESSION["message"]);
    else :
    //for debugging
    echo "There is no message";
    endif
    ?>
</div>

现在总是没有打印消息,而是总是打印“没有消息”!消息变量设置正确,正如我在删除此unset($_SESSION["message"]); 行时所说,显示消息。

顺便说一句,我没有使用框架,只是简单的 php。 有什么帮助吗?

【问题讨论】:

  • 你好像根本没有设置$_SESSION['message']
  • 你不是在 if 里面使用 else,还是我读错了你的代码!!
  • 您需要提供设置消息的代码部分!
  • 我把它设置在另一个地方“一个控制器”,我上面说的第一个代码“”这工作正常“”这意味着它正在显示消息。

标签: php


【解决方案1】:

您似乎没有设置$_SESSION['message'] 变量的位置。如果变量未设置为任何值,则一开始就不会显示任何内容。

【讨论】:

  • 请看我上面的评论
【解决方案2】:

您永远不会设置您的$_SESSION["message"] 变量。因此,一旦您拥有 unset() 它,它就消失了。您必须重新设置它才能使用它。

【讨论】:

  • 他并没有取消整个超全局,只是消息字段。
  • 我指的是那个,但为了更清楚,我更新了答案。
【解决方案3】:

除非您启用了 register_globals,否则您无法取消设置 $_SESSION 变量。 你可以这样做:

unset($GLOBALS[_SESSION]['message']);

或者只是给它另一个值:

$_SESSION['message'] = false;

【讨论】:

    【解决方案4】:

    好的,我明白了,以某种方式在 header(Location) 解决了它之后添加了 exit(),虽然我不知道这与问题有什么关系。谢谢大家。

    【讨论】:

      猜你喜欢
      • 2020-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多