5

私はphpログアウトページを持っています。ユーザーがログアウト リンクをクリックしたとき このページを参照して、インデックス ページにリダイレクトします。しかし、戻るボタンをクリックすると、ユーザーデータを含む前のページが表示されます。もちろん、ページを更新すると、以前のページとデータが表示されません。ログアウトをクリックして戻るボタンをクリックした後、他のコード(drupal)をチェックしました。前のページが表示されず、ログインページが表示されません。私の問題はどこにありますか。これを修正するには?

ログアウトページ:

if (isset($_GET['req']) && $_GET['req'] == 'logout') {
      session_start();
      session_destroy();
      header("Location: index.php");
   exit();
}

ありがとう

4

7 に答える 7

2

これは主にクライアント側の問題であり、ブラウザのキャッシュヘッダーが原因だと思います。

修正は何ですか?

私の意見では、静的コンテンツと非静的コンテンツのキャッシュヘッダーを適切に設定する必要があります

静的コンテンツ(css / javascript / images):これを読む

PHPページ自体の場合: header("Cache-Control", "no-store, no-cache, must-revalidate");

トリックを行う必要があります

于 2012-04-04T18:17:03.800 に答える
2

コードは正しいです。実際には、人々が戻るボタンをクリックするのを防ぐ必要はありません。これが本当に重要だと思う場合は、logout.php に Cookie などを保存できます。メイン ページは、この Cookie が設定されているかどうかを AJAX でチェックします。その場合は、JS を使用してページをリロードできます (もちろん、Cookie の設定を解除します)。しかし、本当に安全な方法は存在しません。

于 2012-04-04T17:57:26.317 に答える
1

基本的に、ユーザーのブラウザ履歴とアクセスしたページのキャッシュを消去する方法を尋ねていますが、現在はそうしていません。ユーザーをログアウトすると、そのユーザーはページを再読み込みできなくなります。ユーザーが一度に読み込みを許可されていたものをブラウザが表示するのを防ぐためにできることは (もしあれば) ごくわずかです (古いデータです)。重要なのは、再読み込み時に新しいデータが取得されないことです。既に読み込まれたデータのキャッシュを消去することはできません。

編集:また、他のコメントを読んだ後に何かを追加したかった: ブラウザーにデータをキャッシュしないように指示できます。これにより、戻るボタンを押してもすべてをリロードする必要がありますが、すべてをリロードする必要があります。それらが認証されている場合でも-これは我慢しなければならないトレードオフです。それは明らかにサイトの特定の状況に依存しますが、ほとんどの場合、それは価値のあるトレードオフになるとは思いません。ページの読み込みごとにリソースが再ダウンロードされるため、ホスティングにはより多くの帯域幅が必要になります。また、ブラウザーがローカル キャッシュに依存できないため、ページの読み込みに時間がかかるため、ユーザーにはアプリケーションが自然に遅く見えます。アクティブにログインしていない限り、データが表示されないようにすることが絶対に必要でない限り、

于 2012-04-04T18:14:01.863 に答える
0

使用は使用していますが$_GET、フォームを検証していません$_SESSION

これを試して

session_start ();
if (isset ( $_GET ['req'] ) && $_GET ['req'] == 'logout') {
    $_SESSION ['auth'] = false ;
    session_destroy ();
}

if (! isset ( $_SESSION ['auth'] ) || $_SESSION ['auth'] == false) {
    header ( "Location: index.php" );
    exit ();
}

メインページに次のようなものがあることを確認してください

session_start ();

if(/** login Condition **/)
{
    $_SESSION ['auth'] = true ;
}

if (! isset ( $_SESSION ['auth'] ) || $_SESSION ['auth'] == false) {
    header ( "Location: index.php" );
    exit ();
}

ありがとう

:)

于 2012-04-04T18:16:22.037 に答える
-3

これをコードに追加すると、ユーザーが戻るボタンをクリックできなくなります。

     ignore_user_abort(true);
于 2012-04-04T18:09:42.473 に答える