2009-08-05 8 views
5

F5や更新ボタンを押した人は誰もが望むページをリフレッシュするのではなく、別のページに移動するようにしてもらえますか?ページをリフレッシュさせないようにする

のような何か:

If (refresh){ 

    goto "link to hopme page" 

} 

ない場合、私は、特定のページにリフレッシュできないようにするためにとにかくありますか?

私は、ちょうどリフレッシュしていない人がいて、私の帯域幅を殺しています。それはゲームサイトなので、私はIPを禁止したくありません。

+0

なぜですか?あなたはPOST変数を再送しないようにしていますか? AJAXを使用します。 –

+0

人がページをリフレッシュするとき、またはF5キーを押してページをリフレッシュするときだけを意味しますか?明確化 – colithium

+2

なぜあなたはこれをしたいですか? – Randell

答えて

8
session_start(); 
if($_SESSION['hasbeenhere'] == 1) 
{ 
// Page refreshed 
} 
else 
{ 
    $_SESSION['hasbeenhere'] = 1; 
} 

ユーザーがCookieを有効にしていない場合、これは失敗します。誰かが別のページに行って戻ってくると、それはリフレッシュされたものとして表示されます。

全体的に、これは確かな方法で行うことはできませんが、これは誰かが同じページを2度見ることを防ぐ1つの方法です。

あなたのコメントのために、人々がF5を200回押すのを止めたい場合は、これを試してください。

$page = $_SERVER['REQUEST_URI']; 
// Defaults 
if(!isset($_SESSION[$page]['count'])) 
{ 
    $_SESSION[$page]['count'] = 1; 
    $_SESSION[$page]['first_hit'] = time(); 
    $_SESSION[$page]['banned'] = false; 
} 
else 
{ 
    $_SESSION[$page]['count']++; // Increase the counter 
} 

// If person is banned, end script 
if($_SESSION[$page]['banned'] == true) 
{ 
    die(); 
} 

if($_SESSION[$page]['first_hit'] < time() - 30) 
{ 
    $_SESSION[$page]['count'] = 1; // Reset every 30 seconds 
} 

if($_SESSION[$page]['count'] > 100) 
{ 
    $_SESSION[$page]['banned'] = true; 
    // Ban if they hit over 100 times in 30 seconds. 
} 
+0

別のページに行き、このページに戻るとカウントが上がりますか?またはこれは爽やかなためだけですか?私は彼らが別のページに行くのを忘れてから帰ってくる –

+0

これは現在のページでのみ動作します、私はそれを修正させてください –

+0

そこを試してみてください。それは少し修正が必要かもしれないが、すべての基本がそこにある。 –

3

なぜあなたはしたいですか?

しかし、いいえ、これを止めることができる一貫性のある方法はありません。

+0

私は、F5ボタンをノンストップで押している人がいて、私の帯域幅を殺しています。 –

+1

その後、これらのIPアドレスを禁止します。 –

+0

多くの人には、ゲームサイト用のものがたくさんあります。 –

1

これはうまくいくのかどうかはわかりませんが、Javascriptでキーストロークを聞くことができますし、F5キーを押すと、あなたが望むことをすることができます。

0

は、私はあなたがこれを行うことができると思います:

session_start(); 

if (isset($_SESSION['visited'])) { 
    header("Location: http://the.page/you/want"); 
} else { 
    $_SESSION['visited'] = true; 
} 
0

さわやかからF5を停止するために、あなたはどのようなタイプのリフレッシュを許可しない必要があるだろう。ハックとして、クエリ文字列にタイムスタンプを入れてみることができます。読み込み中は、タイムスタンプの値を確認し、過去にあった場合は別のページにリダイレクトすることができます。これは、クッキーが無効になっている場合に機能します。

+0

** @ sideproject:**リンクが構築される時刻は、リンクがクリックされた時刻に比べて常に過去になるため、これは機能しません。 –

+0

合意。他のソリューションと一緒に行くことをお勧めします。 – sideproject

0

サイト自体がJavascriptでこれを行います。何かを編集しているときは、さっぱりしたり、戻ったりして、それを緩めないでしょう。おそらくJQueryで定義されたイベントがあります。そのイベントでは、あなたが望むページにリダイレクトします(おそらく、同じドメイン内になければなりません)。

12

おそらく、ページが使用している帯域幅を減らすことに努力する必要があります。画像の圧縮、ページの最適化、キャッシングの領域を調べてください。あなたのPHPコードで

+0

私もそれに取り組んでいますが、今のところ解決策が必要です。 –

+2

よろしくお願いします。あなたのホストがApacheサーバーを使用している場合は、あなたが自由に 'mod_deflate'と' mod_gzip'を持っている可能性が高いです。正しく設定されていれば、テキストコンテンツ(HTML、Javascript、CSSなど)を圧縮します。 PHPを使用している場合、おそらく 'ob_start(" ob_gzhandler ");'を見てください。 – Gav

3

、次の手順を実行します。

if(isset($_SESSION["pagename-LAST_VIEWED"])) { 
    v = $_SESSION["pagename-LAST_VIEWED"]) 
    if(time() - v < 15) { 
     // user is refreshing more than once per 15 seconds 
     // send them something else and die 
     } 
} 
$_SESSION["pagename-LAST_VIEWED"] = time(); 

私安っぽく擬似PHPを無視してください、それは私の毎日の言語ではありません。

これにより、ページの更新(F5)の両方でブックマークを再度クリックするか、アドレスバーのEnterキーを再度押すだけで済みません。

また、攻撃的なキャッシングメタタグとHTTPヘッダーを有効にすると、がリフレッシュされてもサーバーがリフレッシュされることはありませんが、上記のコードはきわめてスケーラビリティが高いはずです。

考慮すべきもう1つの問題:根本的な問題は、ユーザーではなく他のコードです。ページを書き直して、AJAXを介して見たい部分を自動的に更新するようにしてください。これにより、リフレッシュを使用しないようにインセンティブが与えられ、更新したい小さなデータをリフレッシュするだけで、サーバーの処理に役立ちます。

0

この問題には技術的な解決策はありません(他の回答はそれをかなりうまくカバーしています)。ユーザーがこのページで頻繁にリフレッシュしている場合は、ページが変更されることを期待しており、最新の情報が必要だと思うからです。おそらく、ページをリフレッシュしたい理由を取り除くべきでしょう。これを行う最も簡単な方法は、おそらくページをAJAX経由で更新することです。したがって、ユーザーはそこに座ることができ、更新プログラムはすぐにロールインされます。F5は、帯域幅を削減します。ユーザーエクスペリエンスは向上しません。

0

あなたの質問に直接答えているわけではありませんが、おそらくあなたはキャッシングで問題を解決できますか?

あなたは、ヘッダー のCache-Control送信する場合:それは2分間のページを再度要求する必要がないことをブラウザに指示する必要があり、それはキャッシュだからちょうどコピーを使用することができます= 120 公共、最大エージングを。もちろん、彼らはリフレッシュを強制するためにcontrol-f5を使うことができますが、それはたくさんの助けが必要ですか?

0

私は非常に簡単な解決策を見つけました。私の場合は

$_SESSION['admin']['PID']=session_id(); 
$_SESSION['admin']['user_user']=$_POST['user']; 
$_SESSION['admin']['user_pass']=$_POST['pass']; 
$_SESSION['admin']['last_access_time']=time(); 
if($_SERVER['REQUEST_METHOD']==="POST") 
{ 
    header("LOCATION:".$_SERVER['PHP_SELF']."?p=redirected"); 
} 

私は、ユーザーを検証しようとしていた、と私は持っている:私はすべての$ _POST情報を処理し、私はこれを行うの$ _SESSIONのVARに私は必要なものを保存した後、私にとっては

誰かがログアウトして戻って再びサイトの読み込みをリフレッシュするときに、このシンプルで私が最後に解決したときの問題。

PD: "?p =リダイレクト"はポルノをテストするためのものです

関連する問題