2010-02-04 45 views
0

我正在嘗試使用CakePHP創建基於Web的測試(如在考試中)應用程序。Web應用程序中的計時器

當測試開始的網絡服務器存儲會話的確切的開始時間。當測試結束並且客戶端將答案提交給網絡服務器時,網絡服務器將重新檢查提交時間與之前的開始時間。如果總測試時間在指定的誤差範圍內(例如5分鐘),測試結果將被接受。

我已經完成了這個部分,目前使用jQuery Countdown Plugin顯示在客戶端(瀏覽器)的定時器。此計時器還用於在表單過期時自動提交表單。

問題是刷新頁面將復位定時器。回去和前進也會這樣做(因爲它本質上是令人耳目一新)。

儘管在服務器中記錄並驗證了總測試時間(如果用戶篡改了定時器並提交了測試,系統將拒絕該測試),是否有防止這種情況或至少發出警告,甚至更好,在用戶被篡改的情況下自動提交測試(當然會被拒絕)?

我知道我可以通過使用AJAX(仍然是初學者)做到這一點,但上級告訴我,由於帶寬限制(我不這麼認爲),我不這麼做。所以......任何人?

以前謝謝!

回答

0

首先,它沒有那麼多的需要的ajax的,因爲它是具有服務器設置客戶端的計時器上的頁面加載的概念。是的,你可以通過ajax來做到這一點 - 讓客戶端在document.ready()上請求當前時間。但是,除非您需要額外的同步功能(如此才能真正打開整個蠕蟲),否則當您只需從原始服務器提供的頁面設置此值時,就沒有理由通過ajax發出單獨的http請求。

所以,如果你的網頁是/檢查/頁,在ExamsController ::頁面()方法,你可以這樣做:在你渲染視圖

$this->set('cur_time', date('N-d-Y', strtotime()); 

然後,只是在用它做這樣的事情:在一個JavaScript代碼塊,將一個JS變量設置爲黃金jQuery的計數器,可一旦頁面加載完成後重新開始計數片斷

<?php echo $cur_time; ?> 

裹。這裏沒有額外的帶寬!

+0

好吧,實際上它就是我想要的同步功能:)已經完成了這個工作......謝謝! – Furunomoe 2010-02-05 06:45:33

+0

你的意思是同步的結束時間,或者你想重新同步,而頁面被覆蓋。後者就是我所指的,它只適用於你的應用程序是實時的(而不是試圖限制在考試上花費的時間)。基本上,如果你認爲這兩個時鐘可能會在一頁中漂移,那麼你可能想要重新同步。否則,我只是相信客戶的時鐘,而不用擔心在頁面內同步(當然,請記住檢查服務器是否允許提交,不要信任客戶端JS執行此操作)。 – 2010-02-06 19:08:33

1

您需要獲取服務器當前時間和測試開始時間。兩者相減,你會得到用戶已經花了多長時間進入該測試。現在,從時間限制(5分鐘)中減去這個值,剩下的時間;小於零的值意味着測試時間結束。