繁体   English   中英

PHP会话丢失/登录无法正常工作

[英]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(); 
}

但每当我尝试它时,我得到重定向错误:

  • 当我尝试进入页面时,我的浏览器给了我“ERR_TOO_MANY_REDIRECTS”。

或者页面只是清空表单而没有其他任何事情发生。 并且当我不在表单中键入任何内容时应该显示的错误消息也不显示。 它让我头疼一整天,所以如果有人能指出我正确的方向,这将是伟大的。

我在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM