[英]PHP Session lost/login not working
我对php中的会话有疑问。 我创建了一个登录页面,每当我尝试它时,它只是给了我一个重定向错误。 所以我按照这个问题的答案。
所以现在,没有得到重定向错误,每当我按下登录按钮没有任何反应时,表单将被清空,这就是全部。 我究竟做错了什么? 这是目前给我问题的代码的样子。
index.php文件:
<?phpsession_start();
if (isset($_SESSION['valid_user'])) {
Header("Location: index.php");
exit();
}
if (isset($_POST['submit'])) {
$name = $_POST['name'];
$password = $_POST['password'];
$file = file_get_contents("data.txt");
if (strstr($file, "$name||$password")) {
$_SESSION["valid_user"] = $_POST["name"];
$_SESSION["valid_time"] = time();
Header("Location: welcome.php");
} elseif (empty($name) && empty($password)) {
echo "Both fields are empty. Please fill them.";
} elseif (empty($name)) {
echo "No name was entered.";
} elseif (empty($password)) {
echo "No password was entered";
} else {
echo "Wrong credentials, please try again.";
}
}
更具体地说,我认为问题的代码是这部分:
<?phpsession_start();
if (isset($_SESSION['valid_user'])) {
Header("Location: index.php");
exit();
}
但每当我尝试它时,我得到重定向错误:
或者页面只是清空表单而没有其他任何事情发生。 并且当我不在表单中键入任何内容时应该显示的错误消息也不显示。 它让我头疼一整天,所以如果有人能指出我正确的方向,这将是伟大的。
我在index.php中使用的表单HTML:
<body>
<form method="post" action="index.php" >
<p>Enter name:</p>
<input type="text" name="name" />
<br/>
<br/>
<p>Enter password:</p>
<input type="password" name="password" />
<br/>
<br/>
<input type="submit" value="Login" name="submit"/>
</form>
</body>
我认为有太多与代码相关的错误。 在开始PHP标记和session_start();
之间必须有空格session_start();
。
另外,你在if (isset($_SESSION['valid_user']))
给出的条件语句被解释为“如果它被设置”。 你应该用的是!
运算符,表示它是否设置为“NOT”。
这就是为什么你得到“太多的重定向”。
<?php session_start();// try putting space between here
if (!isset($_SESSION['valid_user'])) {
header("Location: login.php"); // Redirect back to your login page
exit();
}
还有} elseif (empty($name) && empty($password)) { // all elseif
else if(condition)
} elseif (empty($name) && empty($password)) { // all elseif
应该是else if(condition)
也改变文件名。
你还应该添加一个exit;
在每个标题之后,否则您的代码将继续执行。
问题出在这里,当你有一个有效的用户然后你试图在index.php
上重定向它再次检查有效用户并再次重定向index.php
就像INFINITE循环一样。
Thanx @ Fred-ii-
你得到了答案,但这里有一个关于“太多重定向”的解释。 您在浏览器上收到该错误,因为您的代码将继续重定向到另一个页面。 你的两个陈述都是真的:
if (isset($_SESSION['valid_user'])) {
} //Returning true - Redirect to index
if (strstr($file, "$name||$password")) {
} //Returning true - Redirect to welcome
由于重定向后有/没有退出,代码继续执行:重定向此处比重定向...
您还应该检查会话验证,如下所示:
if(!isset($_SESSION['session']) || $_SESSION[''] == "")
这将检查会话是否未设置或为空。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.