登录时会话变量未定义


Login with session variables undefined

我会尽我所能解释我的情况,我在这里看了一些问题,但似乎没有一个能回答我的问题。

我用自己的自定义MVC框架创建了一个网站,它运行良好。

我有一个简单的登录命令,它也工作,它正确地返回一个customerID和他们的名字提供他们的电子邮件和密码是正确的。

一旦他们被验证,而不是返回数据,我只是设置了几个会话变量,所以当他们返回到主页时(现在通过会话变量登录),他们显示他们的名字和购物车中的项目,而不是"欢迎访客"。

        if($record = $stmt->fetch())
        {   
            $_SESSION["Name"] = $record["FirstName"];   
            $_SESSION["CustomerID"] = $record["ID"];        
            $_SESSION["LoginStatus"] = true;
            $response->SetViewName("DefaultView"); // Login Success, back to homepage               
        }
        else
        {
            $response->SetViewName("LoginView"); // Login Failure, back to login view   
        } 

在我的header.php文件中,我有显示相应欢迎消息的html代码,如果他们是访问者,他们显示访问者,如果不是($_SESSION["LoginStatus"] == true)他们显示他们的名字和购物车中的项目…

            <?php
            if($_SESSION["LoginStatus"] == false) // if visitor
            {
                echo '<p class="welcome">Welcome visitor, please <a href="Index.php?cmd=Login">log in</a> or <a href="Index.php?cmd=Register">register</a></p>';
            }
            else if($_SESSION["LoginStatus"] == true) // if logged in
            {
                echo "<p class='welcome'>Welcome back ".$_SESSION["Name"].", you have ".$_SESSION["ItemsInCart"]." items in your cart</p>";
            }
            ?>

所以当一个新用户来到网站时,他们有一个会话开始,但是当LoginStatus变量被检查时,它抛出一个错误,由于未定义,但是如果我定义它就在会话开始的下面,当用户登录时,变量总是假的,他们永远不会显示他们的名字或购物车中的项目

使用if检查

isset($_SESSION["LoginStatus"])

在检查它的值之前,如果它设置了,那么检查它的值,如果它没有设置,那么他们根本就没有登录

当没有用户登录时,$_SESSION[loginstatus "]为空。

你必须在第一个脚本中设置它为false或在第二个脚本中检查它是否为空/isset。

尝试在session_start();后添加以下内容

    if(!isset($_SESSION["LoginStatus")){
         $_SESSION["LoginStatus"] = false;
    }

如果我理解正确的话,应该可以解决这个问题。

您可能需要使用空标记来检查,如:

if(!empty($_SESSION["LoginStatus"])){
   code to do as loggined user
 }else{
    code to 
  }