0

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

我不确定为什么我的代码不起作用。我让它工作了,然后它突然停止了,我不确定我改变了什么。另外,我知道这没有使用数据库,我应该使用一个,但是分配调用不使用一个。

这是 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();
    }
?>
4

1 回答 1

1

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

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

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

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

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

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

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

于 2011-11-09T08:15:25.950 回答