2012-04-12 13 views
10

私はウェブページを持っていますA.フォームをクリックしてデータを送信し、ウェブページBに移動します。キャッシュからロードされたものではなく、サーバーからリフレッシュされます。私はこれを持っています:<meta http-equiv="expires" content="0">しかし、それは動作しないようです。私はページB(PHPを介してセッション変数)に変数を設定して、ページAでそれをチェックし、その存在に応じてリフレッシュ(またはしない)を試みました。このdoestもどちらかと思われる。そのための基本的なコードは次のとおりです。 ページA:キャッシュされたバージョンをロードするのではなく、サーバーからページを強制的にリロードする

<?php 
if(isset($_SESSION['reloadPage'])) { 
unset($_SESSION['reloadPage']); 
echo' 
<script> 
window.location.replace("/****/****/*****.php"); 
</script> 
'; 
} 
?> 

とページB上:

$_SESSION['reloadPage'] = 1; 

PHPソリューションで、それは単純に終わることはありませんループ内でページを更新しようとし続けます。私の論理のなかに何かがありませんか?これは正しいことですか?

EDITさらなる調査の際 ページをキャッシュしないようにブラウザを教えてくれたとき、その力は完全なサーバ側も同様に更新していますか?それだけが必要。ページの完全なサーバー側のリフレッシュ。

+0

私たちが見ることができるオンライン版ですか? –

答えて

5

OKの代わりにこれを試してみてください。

<?php 
    if(!session_id()) { 
     @session_start(); 
    } 
    header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); 
    header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); 
    header('Cache-Control: no-store, no-cache, must-revalidate'); 
    header('Cache-Control: post-check=0, pre-check=0', false); 
    header('Pragma: no-cache'); 

    if(isset($_SESSION['form_submitted'])) { 
     unset($_SESSION['form_submitted']); 
     header('Location: ?' . uniqid()); 
     #header('Refresh: 0'); 
    } 
?> 

をあなたは$ _SESSIONを設定する必要があります[ 'form_submitted'] 2ページ

+0

期待どおりに動作しません。しかし、それについてさらに考えてみると、ページをキャッシュしていないかのように思えます...しかし、私が知ることからサーバー側をリフレッシュしているわけではありません。 – mdance

+0

どちらも機能しません。私の一種の損失。 – mdance

+0

私たちが見ることのできるオンライン版ですか? –

0

あなたのJavaScriptは、私はそれがあなたのループを修正すべきだと思う...

window.location = "/****/****/*****.php" 

でなければなりません。

+0

私は彼が人をGoogleに送るつもりはないと思う。 – AndrewR

+0

同じ結果です。私は問題が私のPHPロジックと考えている... – mdance

2

すべての3つを試してみてください:

<meta http-equiv="cache-control" content="no-cache"> <!-- tells browser not to cache --> 
<meta http-equiv="expires" content="0"> <!-- says that the cache expires 'now' --> 
<meta http-equiv="pragma" content="no-cache"> <!-- says not to use cached stuff, if there is any --> 
0
<?php 
    session_start(); 
    if(isset($_SESSION['reloadPage'])) { 
    unset($_SESSION['reloadPage']); 
    echo' 
    <script> 
    window.location.replace("/****/****/*****.php"); 
    </script> 
    '; 
} 
?> 
に真=
+0

セッションはすでにページの先頭で開始されています。 – mdance

1
<?php 
    session_start(); 
    if(isset($_SESSION['reloadPage'])) { 
     unset($_SESSION['reloadPage']); 
      //no outputting code above header 
     header("Cache-Control: no-cache, must-revalidate"); 
     header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); 
     header("Location: http://www.mypage.com/"); 
    } 
?> 
+0

それはあまりにも多くのリダイレクトを言った...私はこれまでのところ最高のソリューションだと思うが。 reloadPage変数を正しく設定していないようです。 – mdance

+0

ヘッダーが既に送信されている可能性があります。ヘッダーの前に出力コードがある場合、HTMLやエコー/プリントなど、文書に出力されるものがあればヘッダが最初になるはずです送信されます。これは通常、「ヘッダはすでに送信されました」というエラーを返します。そのため、未設定ではないセッション変数、ループ内でのセッション変数、ちょっと試したり、変数を特定の値でチェックしたり、それを解除する代わりにnullにする – adeneo

1

私はこれが古い質問であり、すでに回答していることを知っていますer(サーバーからリフレッシュしない)。だから私はjQueryを使って解決策を共有したいと思っています。

$('#back-button').click(function(){ 
    setTimeout(location.reload(true), 1000); 
}); 

説明:
[戻る]ボタンをクリックすると、setTimeoutは、1秒(1000ミリ秒)後にトリガされます。 reloadのパラメータがtrueの場合、ページはサーバーからリロードされます。

truereloadに入れると、サーバからリロードされますが、falseを入力するとキャッシュからリロードされます。ソースw3schools

関連する問題