5

ユーザーが望むページを更新する代わりに、F5または更新ボタンを押した人が別のページに移動するようにするにはどうすればよいですか?

何かのようなもの :

If (refresh){

  goto "link to hopme page"

}

そうでない場合、特定のページで更新を許可しないようにする方法はありますか?

ノンストップでリフレッシュしている人が何人かいて、それが私の帯域幅を無駄にしています。ゲームサイトなのでIPをBANしたくありません。

4

11 に答える 11

12

おそらく、ページが使用している帯域幅を減らすことに集中する必要があります。画像圧縮、ページの最適化、およびキャッシュの分野を調べてください。

于 2009-08-05T18:27:26.007 に答える
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.
}
于 2009-08-05T18:09:55.697 に答える
3

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

しかし、いいえ、これを止めることができる一貫して機能する方法はありません.

于 2009-08-05T18:08:53.843 に答える
3

PHP コードで、次の操作を行います。

 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 経由で一定時間遅れて自動更新することを検討してください。これにより、Refresh を使用しないインセンティブが与えられ、更新を確認したい小さなデータのみを更新するだけでサーバーが対応できるようになります。

于 2009-08-05T18:31:31.443 に答える
1

これが機能するかどうかはわかりませんが、javascript を使用してキーストロークをリッスンし、F5 キーを押して、必要な操作を行っていただけますか。

于 2009-08-05T18:09:49.723 に答える
0

この問題に対する優れた技術的解決策はないように思えます(他の回答はそれをかなりうまくカバーしています)。ユーザーがこのページを頻繁に更新している場合は、ページが変更されることを期待しており、最新の情報を求めているためだと思います。おそらく、ページを更新したい理由を取り除く必要があります。これを行う最も簡単な方法は、おそらくページ自体を更新することです (おそらく AJAX 経由)。したがって、ユーザーはそこに座ることができ、更新はすぐに開始されます。F5 を叩く必要はもうありません。これにより、帯域幅が削減され、ユーザー エクスペリエンスが向上することは言うまでもありません。

于 2009-08-05T19:21:29.733 に答える
0

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

ヘッダー Cache-Control: public,max-age=120 を送信すると、2 分間ページを再度要求する必要がなく、キャッシュからのコピーを使用できることをブラウザーに指示する必要があります。もちろん、control-f5 を使用して強制的に更新することもできますが、それは大いに役立つはずですか?

于 2009-08-05T19:32:50.727 に答える
0

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

session_start();

if (isset($_SESSION['visited'])) {
    header("Location: http://the.page/you/want");
} else {
    $_SESSION['visited'] = true;
}
于 2009-08-05T18:11:25.507 に答える
0

F5 によるリフレッシュを停止するには、どのタイプのリフレッシュも許可しないようにする必要があります。ハックとして、タイムスタンプをクエリ文字列に入れてみることができます。ロード時にタイムスタンプの値を確認し、それが過去のものである場合は、別のページにリダイレクトできます。これは、Cookie が無効になっている場合に機能します。

于 2009-08-05T18:12:47.987 に答える
0

サイト自体がこれを Javascript で行っているため、何かを編集しているときに、更新したり、戻ったりしても、それが失われることはありません。おそらく、これを可能にする JQuery によって定義された何らかのイベントがあるので、それを調べてください。そのイベントで、目的のページにリダイレクトします (おそらく同じドメイン内にある必要があります)。

于 2009-08-05T18:14:30.557 に答える