PHP 不会更改登录时要导入的内容



当您单击login时,它应该显示注销按钮。单击注销按钮应使其再次显示登录选项。目前,它只是坐在登录窗口,即使它创建了一个会话,并填满了正确的信息在我的服务器。

我不知道为什么我的代码不工作。我让它工作,然后它突然停止了,我不知道我改变了什么。此外,我知道这不是使用数据库,我应该使用一个,但赋值调用不使用一个。

这里是index.php:

<?php
    session_start();
    if(empty($_SESSION['email']))
    {
        include("includes/login.php");
    }
    else 
    {
        include("includes/logout.php");
    }
?>

这是我的login.php:

<form id="login" method="post" action="index.php">
    <input name="email" type="email" placeholder="Email@rit.edu" required="required">
    <input name="password" type="password" placeholder="Password" required="required">
    <input class="button" name="submit" type="submit" value="Submit">
</form>
<?php
    //if someone tries to log in
    if (isset($_POST['email']) && isset($_POST['password']))
    {
        $email=($_POST['email']);
        $password=sha1($_POST['password']);
        $users = file('includes/users.php', FILE_IGNORE_NEW_LINES);
        for($i=0;$i<count($users);$i++)
        {
            $user = explode(',', $users[$i]);
            if($user[0] === $email && $user[1] === $password)
            {
                session_start();
                $_SESSION['email']=$user[0];
                $_SESSION['pass']=$user[1];
                $_SESSION['name']="$user[2] $user[3]";
                $_SESSION['admon']=$user[4];
            }
        }
    }   
?>

这里是logout.php:

<form id="login" method="post" action="index.php">
    <input name="logout" type="submit" value="logout" />
</form>
<?php
    if($_POST['logout'] === 'logout')
    {
        session_destroy();
    }
?>

在index.php中,检查用户是否已经登录:

if(empty($_SESSION['email']))

如果不包含,则包含登录页面,否则退出。但是如果你刚刚提交了表单,SESSION['email']仍然是空的,你正在显示你的表单。但是你有你的登录数据,所以如果你的详细信息是正确的,你就会登录-你会在刷新后看到它。

对于您的注销也是如此-如果您提交注销表单,您的会话将在最后一个请求中处于活动状态(这会破坏它),因此注销页面将再次被看到。您需要刷新您的浏览器,登录将出现。

要解决这两个问题,只需在两个if-s的末尾添加一个重定向。例如:

if($_POST['logout'] === 'logout')
{
    session_destroy();
    header('Location: index.php);
}

这将在处理注销后重新加载您的页面,有效地为您提供良好的结果。对登录做同样的操作,它也会工作。

相关内容

  • 没有找到相关文章

最新更新