• ベストアンサー

ブラウザの戻りボタン対策

あるページで何問かのクイズとその解答のデータが入った配列を作ってあります。解答者が不正解の答えを入れると別のページに飛んで、ゲームオーバーになったことをメッセージとして出力し、ゲームを終わらせるようになっています。 クイズと正解の入った配列は、別のページに飛ぶ前にリセットしてありますが、ブラウザの戻りボタンを押すと、最初のクイズ問題から再スタートできてしまいます。 戻ったときにはゲームができないようにするにはどうすればよいのでしょうか? papashiro

質問者が選んだベストアンサー

  • ベストアンサー
noname#93299
noname#93299
回答No.3

Sessionでゲームオーバー状態を管理し、 ブラウザキャッシュを無効にすれば戻るボタンを管理できる気がします。 以下サンプル(テストしてないので、できるかどうか・・・) ゲームの全ページに埋め込むタグ ここから=> <meta http-equiv="Pragma" content="no-cache"> <meta http-equiv="Cache-Control" content="no-store"> <meta http-equiv="Cache-Control" content="no-cache"> <meta http-equiv="Expires" content="-1"> /*次のタグはBodyの直下に置いてください*/ <iframe style="height:0px;width:0px;visibility:hidden" src="about:blank"></iframe> <=ここまで /*ゲーム入口ページ*/ <?php session_start(); $_SESSION['CHK_GAME_OVER'] = "0"; ?> /*ゲームオーバーページ*/ <?php session_start(); $_SESSION['CHK_GAME_OVER'] = "1"; ?> /*戻るでアクセスされたくないページ*/ <?php if($_SESSION != "1"){ die('このページは直接アクセスできません'); } ?> /*ブラウザによってキャッシュ管理が違うのが難点・・・*/

papashiro
質問者

お礼

教えていただいた通りにやってみましたら、うまく戻りボタンを制御することができました。ありがとうございます。 これは今時分が作っているプログラムの最大の難関でした。 一つ一つのクイズ問題が終わったあとに、不正解した人が再度同じ問題をするということは、AJAXを使って回避できていたのですが、いったんゲームオーバーになったセッションを、戻りボタンでもう一度最初からやり直すということを防ぐのに苦労していました。 今回は本当に助かりました。 また何か困ったときに助けていただけると、ありがたく思います。 papashiro

その他の回答 (3)

noname#93299
noname#93299
回答No.4

最後ちょっと間違ってます・・・ ;( /*戻るでアクセスされたくないページ*/ <?php if($_SESSION['CHK_GAME_OVER'] != "0"){ die('このページは直接アクセスできません'); } ?>

papashiro
質問者

お礼

ご回答いただき、ありがとうございます。 今まではPHPのクッキーを使っていろいろ試していて、セッションは使ったことがありませんでしたので、大急ぎで勉強中です。 まだご提案のスクリプトを挿入してテストできていませんが、進展がありましたらお知らせいたします。 papashiro

回答No.2

cookieでゲームオーバーしたかどうかを判断するのはどうでしょうか。

papashiro
質問者

お礼

ご回答ありがとうございます。 ご提案のように、PHPでクッキーを設定し、戻りボタンを押して戻ったときにゲームオーバーを検出したら、history.go(-2) でさらに2ページ先に戻るようにしたら、最初はうまくいきました。しかし次からはどうしても戻りボタンの作用をコントロールできません。図に書くと次のようなものです。 (1) home page (2) game rule 説明 page(cookie は gameJokyo=start) (3) game play page (4) 途中で不正解のため game over message page(cookie は gameJokyo=end) はじめは(1)から順に(2)(3)と進み、ゲームの途中で不正解が出ると(4)に飛んでメッセージを出します。今回のPHPによる戻りボタン対策をしていなかったときには(4)ページから戻りボタンを押すと(3)で同じ問題の組を最初からスタートできてしまいましたが、今は(3)に戻った時点で(onload="・・・・・"で)クッキーがgameJokyo=end なら history.go(-2) として(1)のホームページに行くようにしました。これでユーザーはホームページから別の問題の組をスタートできます。これについては問題はありません。 しかしその後(2)(3)(4)ときたとき、(4)ページで戻りボタンを押すと、今度はホームページではなく(3)に戻ってしまうのです。 いったん不正解になった問題の組はできなくなるようにしたいのですが、この状態ではできてしまうので困っています。 戻りボタンを押して出てくるページ(3)がコンピュータにキャッシュされているページでなく、新たにロードしてくるページならいいのですが。 何か良いアイデアはないでしょうか? なお、このお礼の文章は、先に解答をいただいた方に対するものと同じですが、あしからずご了承ください。 papashiro  

  • gwagaw
  • ベストアンサー率18% (11/59)
回答No.1

javascriptだけでは無理じゃないですかね? 鯖側のプログラム(phpとかjavaとか)導入して簡単に作ったほうが楽じゃないかなと思います。

papashiro
質問者

お礼

ご回答ありがとうございます。 ご提案のように、PHPでクッキーを設定し、戻りボタンを押して戻ったときにゲームオーバーを検出したら、history.go(-2) でさらに2ページ先に戻るようにしたら、最初はうまくいきました。しかし次からはどうしても戻りボタンの作用をコントロールできません。図に書くと次のようなものです。 (1) home page (2) game rule 説明 page(cookie は gameJokyo=start) (3) game play page (4) 途中で不正解のため game over message page(cookie は gameJokyo=end) はじめは(1)から順に(2)(3)と進み、ゲームの途中で不正解が出ると(4)に飛んでメッセージを出します。今回のPHPによる戻りボタン対策をしていなかったときには(4)ページから戻りボタンを押すと(3)で同じ問題の組を最初からスタートできてしまいましたが、今は(3)に戻った時点で(onload="・・・・・"で)クッキーがgameJokyo=end なら history.go(-2) として(1)のホームページに行くようにしました。これでユーザーはホームページから別の問題の組をスタートできます。これについては問題はありません。 しかしその後(2)(3)(4)ときたとき、(4)ページで戻りボタンを押すと、今度はホームページではなく(3)に戻ってしまうのです。 いったん不正解になった問題の組はできなくなるようにしたいのですが、この状態ではできてしまうので困っています。 戻りボタンを押して出てくるページ(3)がコンピュータにキャッシュされているページでなく、新たにロードしてくるページならいいのですが。 何か良いアイデアはないでしょうか? papashiro  

関連するQ&A