• 締切済み

CGIでF5連打されたときにガードする方法

10秒ごとにページ全体を更新かけるチャットのようなCGIで、 F5ボタンを連打して更新された際に、 プログラム側で「F5更新されている」ことを検知して、 「F5連打しないで下さい」的なページを表示したいと思っています。 クッキーを使ってどうにか制御しようとしたのですが、 うまく検知する方法が思いつきません。 ページが更新されたときに、データベース上に持っている 更新回数の情報を+1加算しているのですが、 それを使ってどうにかF5検知しようとしたのですが、 F5を押された場合と10秒ごとの更新である場合の区別を どうつけるのか思い浮かびません。 更新された時間を覚えておき、次に更新された時間が 10秒以内であればF5を押した、という判断以外には なにかないでしょうか? (データベースに新しい情報を書き込んだりするのは  サーバーに負担がかかるので、できればやりたくないです)

みんなの回答

  • takahathi
  • ベストアンサー率100% (2/2)
回答No.3

IPとタイムスタンプをアクセス時に保持してアクセス毎に当該IPのタイムスタンプの差をチェックするというのが一番ポピュラーな対策だと思います。

すると、全ての回答が全文表示されます。
  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.2

サーバかクライアントに数値のデータを持つしかありません。 クライアントの場合は時間を送ってこないとエラーにして、時間が10秒以内ならばエラーになると言うもの。 最初の数字をどのように発行するかがポイントでしょう。 HTMLを10秒毎に書き出しするほうがいいかもしれません。 厳密にやるのならばサーバに何かしらのデータを保存しておかないと無理でしょう。 サーバに負荷がかかるのが嫌ならばそのスクリプトの基本的な動作を見直すべきでしょう。

すると、全ての回答が全文表示されます。
  • wp_
  • ベストアンサー率54% (132/242)
回答No.1

質問者様はサーバとクライアントをきちんと認識すべきです。 「F5を押す」と言うのはクライアントサイドの挙動です。クライアントはそれを受けてサーバ側にhttpクエリを送信します。 サーバ側はその「来たクエリを解釈している」に過ぎません。 ゆえ、結論を言えば「CGI側から何を押されたかなんて分かるはずが無い」 F5だろうがリンク押下だろうがクエリ直叩きだろうが、明示的にその記述が無い限りサーバ側でそれを検出することは出来ません。 >(snip)以外には >なにかないでしょうか? 少なくとも当方は知りません。 クライアント側をjavascriptでギチギチに固めるくらいでしょう。 エンドユーザがどう思うかは知りませんが。 >(データベースに新しい情報を書き込んだりするのは > サーバーに負担がかかるので、できればやりたくないです) 認識がおかしいです。 10秒に一回requestを送る方が何百倍もサーバに負荷をかけていることでしょう。 // 正確にはそこに至るまでのルートですが

すると、全ての回答が全文表示されます。

関連するQ&A