8

ログインが必要なウェブページがあります。ユーザーがログインしたらセッションを開始し、ログアウトすると破棄しますが、戻るページを押すと、ユーザープロファイルページが再び表示されます。これは、ユーザーがログアウトしているため、理想的にはそうではありません。ただし、ログアウト後にページをリロードすると正常に動作します。

これは、オンラインでログインしているすべての人が一緒にチャットできるローカルチャットルームです。3つのページがあります:login.php、、auth.phplogout.php

login.phpフォームを含む一般的なログインページです。auth.phpこれまでのすべてのチャットをdiv表示し、クリックするとテキストボックスと共有ボタンがあり、フォームがauth.phpに再度送信されるため、フォームが投稿されるたびにチャットポストがデータベースに送信され、チャット内の最新のデータベースで認証が再ロードされます。 div.。

問題は、ログアウトするとすべての変数の設定を解除してセッションを破棄することですが、ブラウザ(Safari)で[戻る]ボタンを押すとauth.php、最後のチャットエントリのない以前のバージョンが表示されます。破壊されました。セッション検証を入れたauth.phpので、基本的にauth.phpは、ユーザーのリロードでログアウト後にアクセスします。リロードauth.phpすると「ログインしていません」と表示されます。

私が試してみました

<?php header("Cache-Control: no-cache");
header("Pragma: no-cache");
?>
and
<head>
<meta http-equiv='Pragma' content='no-cache'>
<meta http-equiv='Expires' content='-1'>
</head>

長い質問で申し訳ありませんが、私は本当にこれについて助けが必要です。

4

6 に答える 6

12
header("Expires: Thu, 19 Nov 1981 08:52:00 GMT"); //Date in the past
header("Cache-Control: no-store, no-cache, must-revalidate"); //HTTP/1.1

これは、FF3.6、IE7、IE8、Chrome5で機能します(ブラウザーの戻る/進むボタンを押すと、ページは常に再ロードされます)

別の解決策は、関数によって送信されるのとまったく同じヘッダーを送信することですsession_start()。これは、上記のヘッダーと非常に似ていますが、さらに豊富です。

header("Expires: Thu, 19 Nov 1981 08:52:00 GMT"); //Date in the past
header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0"); //HTTP/1.1
header("Pragma: no-cache");

注:ここに示されている順序session_start()も、によって送信された順序と同じです(FF用のHttpFoxアドオンを使用してこれをテストできます)

于 2011-05-22T16:12:15.797 に答える
7

これらのヘッダーは、ブラウザとプロキシ(存在する場合)にページをキャッシュせず、そのページのサーバーへの新しいリクエストを強制します。

  header("Cache-Control: private, must-revalidate, max-age=0");
  header("Pragma: no-cache");
  header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // A date in the past
于 2010-09-05T09:33:39.373 に答える
4

純粋なJavaScriptソリューションの場合は、これをHTMLに追加するだけです。

<input id="alwaysFetch" type="hidden" />
<script>
    setTimeout(function () {
        var el = document.getElementById('alwaysFetch');
        el.value = el.value ? location.reload() : true;
    }, 0);
</script>

コードは、戻るボタンがクリックされた後に残る非表示の入力に値を割り当てるだけです。次に、これを使用してページが古くなっているかどうかを判断します。古くなっている場合は、ページが再読み込みされます。

于 2014-06-03T13:57:07.457 に答える
0

URLを変更せずに、これをheadタグに入れます。
スクリプトは2つのCookieを使用します。1つ
はページにアクセスした
場合に保存するためのものです。もう1つは再読み込みがトリガーされた場合に保存するためのものです。

if(navigator.cookieEnabled){    
    var visited=0;
    var refreshing=0;
    if(Get_Cookie('visited')) {
        visited=parseInt(Get_Cookie('visited'));
    }
    if (Get_Cookie('refreshing')) {
        refreshing=parseInt(Get_Cookie('refreshing'));
    }
    if(visited==1){
        if(refreshing==0){
             window.document.cookie = 'refreshing=1';
             window.location.reload();
        }else{
             window.document.cookie = 'refreshing=0';
        }
    }else{
        window.document.cookie = 'visited=1';
    }
}
于 2012-03-11T19:35:11.027 に答える
0

戻るボタンを押した後にページをリロードするクロスブラウザメソッドが見つからなかったため、混合ソリューションを使用しています。

まず、すべてのページにいくつかのメタタグを追加します。

<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="no-cache">
<meta http-equiv="Expires" content="-1">
<meta http-equiv="Cache-Control" content="no-cache">

次に、すべてのページのタグに次のJavaScriptを追加します。

<script type="text/javascript">    
// If persisted then it is in the page cache, force a reload of the page.
        window.onpageshow =function(event){
            if(event.persisted){        
                document.body.style.display ="none";        
                location.reload();
            }
        };
</script>

この修正を自分のWebサイトの1つに適用していますが、IE 10、Safari、およびChromeで正常に機能しています。

于 2014-11-30T06:52:57.560 に答える
0

私は多くの解決策を試しましたが、私にとってうまくいったのはこの単純なコード行です。

<body onunload="">

bodyタグを使用してアンロードイベントを追加し、問題を確認します。

于 2015-10-26T12:40:27.917 に答える