【问题标题】:Cannot set $_SESSION variable when a session variable hasn't already been set尚未设置会话变量时无法设置 $_SESSION 变量
【发布时间】:2015-02-05 13:51:10
【问题描述】:

对于这个问题的答案,我有点难过。

我有一个注册表单,如果在检查表单输入时出现问题,我会将消息保存到会话变量,然后检查该会话变量是否包含任何内容,如果有,在我的页面顶部显示输出我调用session_start();,在设置消息时我使用类似$_SESSION['msg'] = "Fill out all the information";

但是我遇到的问题是,这仅在用户登录时有效(即会话已经开始)并且没有会话时 $_SESSION['msg'] 变量没有得到设置。

要检查错误消息,我使用此代码。

        if(isset($_SESSION['msg'])){
            echo $_SESSION['msg'];
            unset($_SESSION['msg']);
        }

从页面顶部的代码可以看出,它们之间几乎没有什么区别。但是有一个检查来查看用户是否有一个有效的会话,但是这一切都是根据它的评估方式返回真或假,我已经检查过了,它似乎并没有像我一样导致问题取出来,问题依旧。

谁能解释一下这个问题?

session_start();
include_once("".$_SERVER['DOCUMENT_ROOT']."/includes/Krumo/class.krumo.php");
include_once("".$_SERVER['DOCUMENT_ROOT']."/auth/class_loader.php");
    $sessCheck = new userFunc;
    if($sessCheck->validSess('bool')){
        $sess = true;
    }
    else{ $sess = false;}


if(isset($_POST['email'])){
    if($_POST['email'] != NULL && $_POST['username'] != NULL && $_POST['pass'] != NULL && $_POST['rpass'] != NULL){
        $e = preg_replace('#[^a-z0-9_@.-]#i', '', $_POST['email']);
        if (!filter_var($e, FILTER_VALIDATE_EMAIL)) {
            $_SESSION['msg'] = "Please enter a valid email";
            return false;
        }
        else{

            $check = new userFunc;
            if($check->userExists($_POST['email'],$_POST['username'])){
                $_SESSION['msg'] = "An account with that email or username already exists";
                return false;
            }
            else
            {
                if(!$check->pswdMatch($_POST['pass'],$_POST['rpass'])){
                    $_SESSION['msg'] = "Passwords do not match";
                    return false;
                }
                $register = new register;
                $user = $register->startReg($_POST['username'],$_POST['email'],$_POST['pass']);
            }
        }
    }else
    {
        $_SESSION['msg'] = "Fill out all the information";
        return false;
    }
}

【问题讨论】:

  • 在顶部(在sessionStart 之后)尝试添加$_SESSION['msg'] = "";,这样你就知道它总是设置.. 但我没有立即看到问题。
  • 为什么要将它放在会话中?
  • @dan-klasson 我也这么想,但没那么重要。也许是在某处或某处看到最后一条消息:D
  • 看起来像是在尝试 flash 消息传递mikeeverhart.net/php/session-based-flash-messages
  • 它是否重定向回同一页面?或者到不包含session_start()的其他页面?

标签: php session-variables


【解决方案1】:

我找到了问题所在。在我的页面下方,我正在构建一个位于页面右上角的帐户栏,该帐户错误使用相同的$_SESSION['msg'] 用于位于顶部该栏中的登录表单,并且因为有一个消息集在其中,它正在回显消息,然后取消设置,然后重新加载页面。

【讨论】:

    猜你喜欢
    • 2021-01-01
    • 2021-11-29
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    • 2011-11-13
    相关资源
    最近更新 更多