Php 字符串未更新

Php 字符串未更新,php,session,pdo,Php,Session,Pdo,我正在使用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; ?>

我正在使用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; ?>
因此,如果会话为空,则显示Hello您是否要通过单击“登录”登录,它将打开登录模式,如果会话为空,则显示Welcome back user并将链接更改为logout.php。我遇到的唯一问题是,当会话不是空的时候,它不会更新字符串。我的登录模式工作得很好,就好像用户输入了错误的密码,它重定向到index.php并说错误的密码,但是如果用户登录,它重定向到index.php但不更新字符串

如果有帮助,这是我的index.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中,我有一个名为email和password的文本输入,所以所有东西都链接得很好,只是字符串似乎没有更新。有人知道我做错了什么吗

移动

session_start();
在文件的顶部,它必须是在文件中执行的第一件事情

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

同样重要的是要知道,在a.php中调用session_start不会使会话在b.php中生存,除非session_start也在b.php中调用。或者,如果将a.php重定向到a.php refresh,则除非在文件的开头有session_start,否则会话将不会激活,因此使用if语句确定会话是否应该进行是行不通的,如果从一开始就有效,那么在这两者之间的值将丢失