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'] はまだ空で、フォームが表示されています。ただし、ログイン データがあるので、詳細が正しければログインされ、更新後に表示されます。

ログアウトについても同じことが言えます。ログアウト フォームを送信すると、セッションは最後の 1 つのリクエストに対してアクティブになり (それによって破棄されます)、ログアウト ページが再び表示されます。ブラウザを更新する必要があります。ログインが表示されます。

両方の問題を解決するには、両方の if-s の最後にリダイレクトを追加するだけです。例えば:

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

これにより、ログアウトの処理後にページがリロードされ、効果的に良い結果が得られます。ログインに対して同じことを行うと、それも機能します。

于 2011-11-09T08:15:25.950 に答える