2011-07-06 2 views
1

質問ごとに3分でタイムアウトするユーザークイズを作成しています。ユーザーが何も起こらないように、または押しても0ポイントを得るというメッセージが表示されても、ユーザーはそれを押したり、更新したりすることができないようにするにはどうすればよいですか。私はこれを行うために警告ボックスを試しましたが、警告ボックスが開くと時計が止まります。誰にどのようにこれを達成することができますか?ユーザーが押し戻すのを無効にする

+5

をあなたははずの、彼/彼女はだ – Ibu

答えて

0

戻るボタンの動作はユーザー/ブラウザによって異なります。つまり、戻るボタン自体を無効にする方法はありません。新しいウィンドウを開き、親ウィンドウからカウンタを参照するなど、いくつかの回避策があります。しかし、戻るボタン自体を無効にすることはできません。

0

他のところで示唆されているように、バックやリフレッシュの動作を無効にすることはできません。しかし、彼らはページを離れしようとしたときにユーザーに(たとえば、ポップアップメッセージなど)のアクションを実行できます。

<body onbeforeunload="return confirm('If you leave this page, you will receive 0 points. Stay on page?');"> 

をこの種の干渉は、ユーザーに迷惑ですし、使用すべきではないことに注意してください一般の観客に。しかし、権威あるクイズの文脈では、これは容認できるかもしれません。

一部のブラウザ(Operaなど)はサポートしていませんonbeforeunload.テスト担当者が使用できるブラウザを制限する必要があります。

2

JavaScriptを使用せずにデータベースを使用して、時間制限を適用できます。

+-------+-----------+----------+--------+------+ 
|user_id|question_id|start_time|end_time|answer| 
+-------+-----------+----------+--------+------+ 

は、あなただけの(user_id, question_id)が一意であることを確認する必要があり、彼らは3分以上を取る場合、彼らは疑問に0を取得します。

これにより、同じ質問に複数回答えるのを止めることもできます。

+1

にできるはずです適切な解決策のみ。クライアント側のようなものをしないでください。 – ThiefMaster

+0

サーバー側のコードを使用しても、ユーザーがインターネットで完全に識別できない可能性があると考えてください。だから誰かが2回のログインをした場合、このユーザーはまだあなたの罠の周りにいます。 – BurninLeo

+1

@BurninLeoあなたが言っていることは非常に真実です。ユーザーを一意に識別することは難しいですが、これはJavaScriptを使用してページをユーザーに保つことから、すべての面で大きな前進です。 –

0

セッションに表示されている現在の質問を保存すると、ユーザーがクリックしても、どこに質問が表示されます。

しかし、明らかに(javascript)タイマーもリセットされます。これに対処するには、同じセッションで質問を表示する際にタイムスタンプを保存し、送信時にアイデアになることを確認します。それらのアクションの結果をユーザーに知らせるために、javascript "onbeforeunload"と組み合わせてGeorge Cumminsが述べたようにします。

だから、質問ロードするとき:

$_SESSION['current_question']['id'] = $question['id']; 
$_SESSION['current_question']['timestamp'] = time(); 

と答え提出:ユーザーは残したいときに

if((time() - $_SESSION['current_question']['timestamp']) =< 180) 
{ 
    // Decide the amount of points earned 
    $score = ... 
} 
else 
{ 
    // User took more than 3 minutes, set score to 0; 
    $score = 0; 
} 
関連する問題