我正在使用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 语句来确定会话是否应该持续是行不通的,如果它一开始就有效,值将在两者之间丢失。