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

时间:2016-02-17 12:15:34

标签: php session

我对php中的会话有疑问。我创建了一个登录页面,每当我尝试它时,它只是给了我一个重定向错误。所以我按照this问题的回答。

所以现在,不是得到重定向错误,每当我按下登录按钮没有任何反应时,表单将被清空,就是这样。我究竟做错了什么?目前这是给我问题的代码看起来像。

的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(); 
}

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

  • 我的浏览器给了我&#34; ERR_TOO_MANY_REDIRECTS&#34;当我尝试进入页面时。

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

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

2 个答案:

答案 0 :(得分:3)

我认为有太多与代码相关的错误。打开的PHP标记和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(); 
}
{p <1}}中的

应该与} elseif (empty($name) && empty($password)) { // all elseif

相似

也会更改文件名。

您还应在每个标头后添加else if(condition),否则您的代码将希望继续执行。

当您拥有有效用户,然后尝试在exit;上重定向时会出现问题,这会再次检查有效用户,并再次重定向index.php,如INFINITE循环。

Thanx @ Fred-ii -

答案 1 :(得分:0)

您已经得到了答案,但这里有一个关于“太多重定向”的解释。您在浏览器上收到该错误,因为您的代码将继续重定向到另一个页面。你的两个陈述都是真的:

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[''] == "")

这将检查会话是否未设置或为空。