2013-04-22 52 views
1

我需要在Gmail中實現驗證碼功能。 如果用戶第一次請求,則不會顯示驗證碼圖像。 但是,如果用戶請求第二次登錄,(用戶第一次輸入了錯誤的密碼)需要顯示驗證碼。如何檢查請求是否來自同一客戶端瀏覽器?

請讓我知道如何檢查請求是否來自同一用戶,以便我可以在我的spring類中實現一些業務邏輯。

+0

檢查您是否可以使用會話ID。 – 2013-04-22 10:28:00

回答

1

你爲什麼要將登錄嘗試綁定到具體用戶?如果我是一個男性因子,我想猜測密碼,我會使用可以使用代理的bruteforcer。

每次我有新的IP,所以你的驗證碼不適合我。

在我看來,更好的解決方案是存儲不正確的登錄嘗試計數器。每次有人輸入特定登錄名的錯誤密碼時,都會增加此登錄名的計數器值。如果密碼正確,則將此值設置爲0.如果計數器值大於0,則會顯示您的驗證碼。

+1

令人驚歎的答案Maksim。非常感謝..你已經將我的問題變成了一個非常簡單的解決方案。 – atulsri 2013-04-22 11:18:23

+0

如果我的答案有幫助,可以將其標記爲最佳。 – 2013-04-22 13:06:06

0

在服務器端(servlet的)創建此會議

session.setAttribute("count",i); //you can use getAttribute() method to check the count. 
+0

該屬性對所有用戶都是通用的嗎?我如何才能使它成爲單個用戶的具體數字? – atulsri 2013-04-22 10:47:08

+0

不同的瀏覽器請求不同。會話對象是爲第一個傳入請求創建的,稍後每個請求由同一個會話對象標識。所以'count'存儲在會話中。 – AmitG 2013-04-22 10:49:45

+0

換句話說,它對每個瀏覽器請求都是*不*不同。 – EJP 2013-04-22 12:06:46

1

連接櫃檯HTTP會話中命中HttpSession

HttpSession session = request.getHttpSession(); 

,並保持計數。您可能需要將會話存儲在服務器端,而在分佈式ENV中,您應該跨服務器同步HTTP會話。您也可以將該信息存儲到客戶端Cookie中。

0

有一對夫婦的方式做到這一點:

  • 當第一次加載頁面,啓動一個會話(或發送一個coookie)。對會話/ cookie使用計數。一旦你第二次找到cookie,你可以吐出一個驗證碼。
  • 使用隱藏的表單域。把一個特殊的名字/價值對,你可以識別第二個請求,併發送一個驗證碼。
  • 使用AJAX!這將涉及使用XMLhttprequest提交您的表單,如果無效,您可以顯示驗證碼!這可能會給你更多的控制權,但是以重新工作爲代價。

最後兩個項目符號假設您想對錯誤的密碼進行驗證,而不是對不同的請求/頁面重新加載。

以上每種方法都有其優缺點。您需要根據您的需要選擇一種或多種組合或多種組合。

相關問題