【问题标题】:PHP Session and it's variablesPHP Session 及其变量
【发布时间】:2013-05-28 09:01:32
【问题描述】:

当用户通过带有激活码的链接访问站点时,他的帐户已激活(数据库中的值已更改),我想显示一些信息消息。为此,我使用$_SESSION['message'] = "activated" 重新加载页面(同时从 URL 中删除激活码)。信息消息块代码:

<? if ($_SESSION['message'] === "activated") { 
ShowAlert('ActivatedOk-popup');

echo '
<div id="ActivatedOk-popup" class="info-popup">
<div class="popup-info-wrapper"><div class="leaflet-popup-close-button">×</div>
    <div class="popup-header">'.ACTIVATION_POP_HEADER.'</div>
    <div class="popupRecord1">
               <p>'.ACTIVATION_POP_TEXT1.$_SESSION['name'].ACTIVATION_POP_TEXT2.'</p>
    </div>
    <button class="popup-btn close_but">'.ACTIVATION_POP_BTN.'</button>
</div>
</div>';

unset($_SESSION['message']);
}
?>

但我不明白为什么这个弹出窗口没有出现。如果我删除最后一行:$_SESSION['message'] = ""; 一切正常,但 Message 变量不为空,并且每个页面都会弹出。如何正确显示弹出窗口然后取消设置变量?

【问题讨论】:

  • 你用过session_start()吗?
  • Phil 的评论 +1,您可能不需要相同的比较 (===) 就等于 (==)
  • 避免使用 == 而不是 ===。
  • 当然,会话开始了,没有UNSET,它工作得很好。没关系,如果我使用比较或等号。我不明白为什么在生成弹出消息之前未设置变量。
  • 回显您的(检查)$_SESSION['message'] 的值而不设置,它是否给出 "activated"

标签: php session variables unset


【解决方案1】:

在尝试使用任何会话变量之前,您必须启动/初始化会话 *session_start();*。 通过在初始化后回显一次 $_SESSION['message'] 来检查


<? session_start(); //echo $_SESSION['message'];
?>

【讨论】:

  • 会话正常。如果我删除最后一行(未设置),我可以在服务器变量“消息”的会话文件中看到。但在最后一行,这个变量被删除了。
  • 回显你的(检查)$_SESSION['message'] 的值而不设置,它是否给出了 "activated"
【解决方案2】:

您的代码在理论上是正确的。就像匿名状态的评论一样,您应该使用session_start(); 来确保会话处于活动状态。 (请参阅 PHP ini 设置会话“自动启动” - 不同服务器上的设置可能会有所不同)。

关于您的代码:我建议不要使用短的开放标签(因为在不同的配置中可能不允许使用这些标签)。我建议在检查其内容之前检查会话变量是否存在,以避免不必要的通知,例如:

<? if (isset($_SESSION['message']) && $_SESSION['message'] === "activated") { 
     // foo
 }
?>

话虽如此。您的问题最可能出在函数ShowAlert() 中。你介意分享一些细节吗?

【讨论】:

  • 问题肯定不在功能上,因为在页面代码中没有出现应该通过 echo 打印的 html。如果删除功能,它也不起作用。
猜你喜欢
  • 2012-06-11
  • 2016-06-06
  • 2020-10-22
  • 1970-01-01
  • 1970-01-01
  • 2013-08-25
  • 1970-01-01
  • 1970-01-01
  • 2013-02-07
相关资源
最近更新 更多