我正在使用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; ?>
因此,如果会话为空,则显示&#34;您好,您想登录&#34;通过单击登录,它将打开登录模式,如果会话不为空,则显示&#34;欢迎回用户&#34;并将链接更改为logout.php。我遇到的唯一问题是,当会话不为空时,它不会更新字符串。我的登录模式完美无缺,就像用户键入错误的密码一样,它重定向到index.php并说'#34;错误的传递&#34;但是如果用户登录它重定向到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中,我有文本输入名为&#34; email&#34;和#34;密码&#34;所以每个人都完美地联系起来,似乎字符串没有更新。有谁知道我做错了什么?
答案 0 :(得分:1)
移动
session_start();
到文件的顶部,它必须是文件中执行的第一件事。
在使用会话变量进行任何写入或读取或将任何输出写入浏览器之前,会话必须正在运行。重要的是,你不希望会话存在,这取决于他们是否拥有一个具有适当价值的正确密钥;如果你的代码中的某个点可能需要会话密钥的会话值,那么你总是希望有一个持续的会话,即从头开始调用它,以便在你需要它时可以使用它,而不需要你必须了解什么打破了它。
同样重要的是要知道在session_start()
中调用a.php
不会使会话在b.php
中生效,除非在session_start()
中调用b.php
。或者,如果您将a.php
重定向到a.php
(刷新),那么除非您在文件开头有session_start()
,否则会话将不会生效,因此使用if语句来确定会话是否应该如果工作开始,那么持续进行是不会有效的,价值将在两者之间失去。