【问题标题】:PHP Session Variable not showing prior to unset being called在调用未设置之前未显示 PHP 会话变量
【发布时间】:2017-08-22 20:43:43
【问题描述】:

基本上我有以下代码,目前可以正常工作:

if ( isset($_SESSION['message']) )
    {
    echo '<p class="user_message">'.$_SESSION['message'].'</p>';

    //unset( $_SESSION['message'] );
    }

如您所见, unset() 已被注释掉。我想要做的是在回显后取消设置会话消息。但是,当我在没有 cmets 的情况下运行此代码时,会话变量根本不会回显?

非常感谢。

编辑:

感谢您的回复,但是此解决方案不起作用,并返回与我最初尝试相同的结果。这是定义会话消息的代码:

$_SESSION['message'] = "";

// We know user email exists if the rows returned are more than 0
if ( $result->num_rows > 0 ) {

$_SESSION['message'] = $_SESSION['message'].'User with this email already         exists!<br />';

 }
// Validate email address  
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {

$_SESSION['message'] = $_SESSION['message'].'Email address is invalid, please try again!<br />';

}
// Validate Referral code
if ( $refby != "" ) {
if ( (count_digit($refby) > 0 && count_digit($refby) < 6) || count_digit($refby) > 6 ) {
        $_SESSION['message'] = $_SESSION['message'].'Referral code is invalid!<br />';
} elseif ( !is_numeric($refby) ) {
        $_SESSION['message'] = $_SESSION['message'].'Referral code is invalid!<br />';
}

}

 // Validate password length
if ( count_digit($_POST['password']) < 6 ) {

$_SESSION['message'] = $_SESSION['message'].'Password invalid, must be more than 6 characters!<br />';

}

// Validate password confirmed
if ( $_POST['password'] != $_POST['confirm_password'] ) {

$_SESSION['message'] = $_SESSION['message'].'Your passwords do not match!<br     />';

}

 if ( count_digit($num1)>2 || count_digit($num2)>2 || count_digit($num3)>2 ||       count_digit($num4)>2 || count_digit($num5)>2 ) {

$_SESSION['message'] = $_SESSION['message'].'Please select your lucky    numbers!<br />';
 }

if ( $_SESSION['message'] != "" ) {
header("location: #register_content");

但是,在取消设置会话变量之前,我不明白代码是如何完美运行的?即使在未设置会话变量之前已回显内容?

非常感谢

【问题讨论】:

  • 如果您只运行该代码,它不会显示,因为没有任何东西将值设置为 $_SESSION['message']
  • isset($_SESSION['message']) 不检查会话中是否有任何值,仅在设置时检查。可以同时设置和清空。
  • 你能提供更多代码吗?是什么导致了这一点?您何时/如何设置消息会话变量?
  • 仅凭此代码无法给出正确答案
  • 添加了更多代码,谢谢,如果我从原始代码中删除 unset(),脚本将按应有的方式执行,我可以确认消息变量包含数据。唯一的问题是消息变量仍然设置为保存错误。

标签: php session echo unset


【解决方案1】:

所以对于任何感兴趣的人。

这是因为脚本继续运行,不确定它是如何工作的,但基本上一旦会话变量被删除,脚本就无法再引用它。

在脚本中取消设置会话变量后,exit(0); 是必需的。这解决了问题,并且未设置会话变量,但是脚本仍会在未设置会话变量之前回显会话变量的内容。

【讨论】:

    【解决方案2】:

    您可以使用以下方法:

    if ( isset($_SESSION['message']) )
    {
        $message = $_SESSION['message'];
        echo '<p class="user_message">'.$message.'</p>';
        unset( $_SESSION['message'] );
    }
    

    它将打印数据以及稍后取消设置。

    还记得在脚本开头调用session_start()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多