2016-01-23 55 views
0

我正在構建PHP/jQuery/AJAX定時測驗。 正如你可能從AJAX中得出的那樣,我完全想要測驗,以便用戶不必刷新頁面或提交任何表單。在PHP和Ajax中構建安全測驗的好方法

那麼,讓我們以數學測驗爲例。 我想要的是,每次用戶回答問題時,我都希望它說出答案是對還是錯,但是我不能鍛鍊的事情是,安全地從服務器接收答案,以便用戶不能閱讀它們(例如,不是純文本)

我想過一種方式來獲取問題的方式,腳本或其他東西不能用於作弊。要做到這一點,我會讓頁面請求服務器提出的問題,並返回一堆圖像URL(使用PHP創建),這樣一切都很好,並且已經解決了。

然而,我的問題是客戶端頁面將如何知道答案,而用戶找不到它?每次回答問題時,我都會考慮向服務器發送一個AJAX請求,然後檢查它是對還是錯,然而完成測驗需要花費太多時間。

另一種方法(目前爲止最好)是發送一個AJAX請求來獲得答案,並且從中返回的項目是一串隨機字母和數字,以及「解密」代碼jQuery腳本可以用來計算出答案,並在每個問題後檢查它們是否正確(所以基本上混淆了答案,但是通過這種方式,用戶可以閱讀我的jQuery代碼並使用它來找出答案的答案然後解密作弊的答案)

另一種方法是在測驗結束時通過AJAX提交所有用戶zanswers,然後服務器檢查並返回有多少是正確/錯誤,然後告訴用戶哪些是他們得到的對或錯,但我想避免這一點,因爲我想要一種方式,讓他們知道每個問題之後,如果他們得到最後一個正確與否。

所以我基本上問的是,是否有任何安全的方式(在哪些用戶不可能工作出答案)從每個測驗之前使用AJAX服務器獲得答案,並使用jQuery告訴用戶在每個問題後,如果他們知道對或錯?

+3

如果答案在您的代碼中可以看到的瀏覽器中,那麼任何使用瀏覽器的人都可以看到它們。你必須檢查服務器上的答案。沒有其他安全的方式。 –

+0

「但是,這將花費很多時間」 - >不,爲什麼?典型的請求應該<100ms,這將如何影響用戶體驗? –

+0

感謝您的回覆 給Paul Jan - 然而,有些人可能會有一個較慢的連接,並且由於某種原因某人連接速度減慢,無論是幾秒或一般慢,然後發送一個定時測驗每個問題後的阿賈克斯請求將浪費寶貴的時間來完成測驗 – user3347769

回答

1

做這種類型的測驗的最佳做法是在用戶回答所有問題後顯示答案。由於用戶可能想要修改他/她的答案......所以我建議您通過以下方式獲取問題: ajax並通過ajax檢查用戶在數據庫中給出的答案來查看最終分數!

+1

嘿Shrikanth,謝謝你的回答!我想這將是最好的辦法,謝謝 – user3347769

+0

很高興我能幫上忙。 –

1

簡短的回答是否定的。 一旦您以可用於確定用戶是否輸入正確答案的格式將答案發送給客戶端,用戶在回答問題之前也能夠解密答案。

這可以安全地完成的唯一方法是在客戶端沒有答案。因此,您需要從服務器獲得答案的正確性。我建議尋找方法來加速你在服務器上的驗證過程。例如通過在會話中存儲答案。

+0

嘿謝謝你的回答,我認爲最好的辦法是在最後發送答案進行驗證,因爲我希望問題之間的延遲很小,因爲它會是一個定時測驗 – user3347769