0

ユーザー名とパスワードを要求する PHP ログイン スクリプトを使用しています。

認証されたプログラムは、セッション値を保存します。ログアウト時に、セッション値は空白に設定されます。

問題は次のとおりです。

IE 8 (Firefox ではない) では、「Web ページの有効期限が切れました」というメッセージが画面に表示されるまで、ユーザーは戻るボタンを数回押すことができます。これはおそらくログイン画面です。

彼が F5 を押すと、ユーザー名とパスワードがまだ POST 変数にぶら下がっているように見え、彼は再びログインします。

4

3 に答える 3

0

ログインフォームを投稿し、確認/ログイン/すべてを行った後、header('location:someOtherPage.php)別のページにリダイレクトします。その後、f5キーを押してもフォームを再投稿できなくなります。例えば:

//login.php
<?php
//no cache headers if you want.
session_start();
if(isset($_POST) && !empty($_POST)){
    //validate user & pass. if valid set session then...
    if(is_valid_user()){
        //set session
        $_SESSION['loggedIn'] = true;
        //close session. this prevents problems with vars not
        //setting when using a header redirect because you redirect
        //before the session file can write.
        session_write_close();
        //redirect to another page
        header('location:loggedIn.php');
        //stop the script from running
        exit;
    } else {
        echo "<div class='error'>Login failed.</div>";
    } 
}
//echo login form.

?>

ヘッダーリダイレクトは履歴に表示されないため、押し戻すと、フォームを再投稿できるページは表示されません。

于 2010-07-27T22:58:27.077 に答える
0

サーバー上のセッションを実際に削除しているのではなく、クライアント上の URL (または何か) のセッション ID をクリアしているようです。したがって、戻るボタンが押されると、セッション ID が渡され、サーバーがそれを受け入れて再送信しようとします。

また

ページはクライアントによってキャッシュされているだけで、プッシュバックすると、キャッシュから読み込まれます。更新を強制すると、変数なしでページが再読み込みされます。

于 2010-07-27T21:46:53.360 に答える
0

これを修正するには、セッション ベースのベリファイアを実行する必要があります。ログイン フォームにランダムなベリファイア文字列を含む隠しフィールドを渡します。ランダムな文字列をセッションに保存し、再投稿された非表示フィールドを使用して、この識別子に対して検証します。ログインを確認した後、ベリファイアを再生成するため、次回フォームが投稿されたときにベリファイアが正しくなく、戻るボタンの投稿が機能しません。

于 2010-07-27T21:49:03.853 に答える