字符串未更新


String not updating

我正在使用MVC和PDO。我正在尝试根据会话是否为空来更新字符串,因此在我的 index.phtml 中我有:

<?php if (!empty($_SESSION)) :?>
    <p>
        Welcome back, <a href="logout.php"><?php echo $_SESSION["info"]["users_name"];?></a>
    </p>
<?php endif; ?>
<?php if(empty($_SESSION)) : ?>
    <p>
        Hello, would you like to <a href="" data-toggle="modal" data-target="#myModal">sign in</a>
    </p>
<?php endif; ?>
因此,如果会话为空,则

通过单击登录显示"您好,您要登录",它将打开登录模式,如果会话不为空,则显示"欢迎返回用户"并将链接更改为注销.php。我遇到的唯一问题是当会话不为空时,它不会更新字符串。我的登录模式工作得很好,就像用户输入错误的密码一样.php它会重定向到索引并说"错误的传递",但是如果用户登录它会重定向到索引.php但不更新字符串。

如果有帮助,这是我的索引.php:

<?php
require("Models/UserData.php");
$view = new stdClass();
$view->pageTitle = 'Login';
if(isset($_POST["email"]) && isset($_POST["password"])) {
    $userVeri = new UserData();
    $result = $userVeri->login($_POST["email"],$_POST["password"]);
    if (!empty($result)) {
        session_start();
        $_SESSION["info"] = $result;
        header("Location: index.php");
        exit;
    } else {
        echo "Wrong pass";
    }
}
 // Then verify it

 require("Views/index.phtml");

在我的 index.phtml 中,我有名为"电子邮件"和"密码"的文本输入,因此一切都完美链接,只是字符串似乎没有更新。有谁明白我做错了什么?

移动

session_start();

在文件的顶部,它必须是文件中执行的第一件事。

在使用会话变量完成任何写入或读取或任何输出写入浏览器之前,会话必须正在运行。重要的是,您不希望会话存在,这取决于它们是否具有具有适当值的正确键;如果您在代码中的某个时刻需要会话密钥中的会话值,那么您总是希望有一个持续的会话,即从头开始调用它,以便在需要时使用它可用,而无需了解是什么破坏了它。

同样重要的是要知道,在a.php中调用session_start()不会使会话在b.php中活动,除非b.php也调用session_start()。或者,如果将a.php重定向到a.php(刷新(,则除非在文件开头有session_start(),否则会话将不会存活,因此使用 if 语句来确定会话是否应该持续是行不通的,如果它一开始就有效,值将在两者之间丢失。