2010-09-24 101 views
1

在我的Web應用程序中,即使重新啓動瀏覽器(「記住我」功能的網站),我也需要識別登錄的用戶。使用Java Servlet API實現此目標的最佳實踐是什麼?使用Java Servlets進行長時間登錄的最佳方式

我已經考慮了以下選項:

  1. 長期使用HttpSession的會議,並存儲用戶標識符作爲會議的一個屬性。這種方法不允許用戶重新啓動瀏覽器,因爲JSESSIONID cookie不是持久的,並且沒有標準的方法來改變它的屬性。我考慮的唯一選擇是使用Tomcat 7.0的SessionCookieConfig接口來調整默認的JSESSIONID參數。但是對這種解決方案的可擴展性存在疑慮,因爲Tomcat會長時間存儲所有會話。

  2. 使用短期的HttpSessions和一些持久性cookie一起存儲用戶標識符和一些安全哈希值。當用戶重新啓動瀏覽器時,它發送持久性cookie,應用程序服務器將新會話與用戶標識符綁定。

實現此目的的常用方法是什麼?

+0

只需複製大傢伙正在做的事情,像Google,Yahoo或Microsoft ... – 2010-09-24 14:32:41

+0

他們使用什麼方法?你能建議從哪裏獲得更多信息? – pheasant 2010-09-24 14:37:40

+0

重複的[Java - 我如何讓用戶登錄到我的網站幾個月?](http://stackoverflow.com/questions/2185951/java-how-do-i-keep-a-user-logged-into -my-site-for-months) – BalusC 2010-09-24 14:37:49

回答

0

我一直需要對會話進行更多的控制,因爲我需要他們跨多個Web應用程序工作,所以我從頭開始實施自己的解決方案。這很容易,只需散列一個隨機數並將其存儲在數據庫中。如果你沒有或想要一個RDBMS只是某種鍵/值存儲。

0

您是否使用普通的基於過濾器的身份驗證?您的網站需要有多安全?

方式一:

降與他們的瀏覽器中有一個代碼,一個cookie。在Tomcat中,配置一個典型的過濾器。過濾器抓取代碼並根據數據庫檢查其有效性。如果代碼有效,則避免使用普通的Tomcat認證。如果需要任何持久化的會話變量,則可以立即從數據庫加載它們。

在每次響應中放入一個新的cookie代碼。它應該包含鹽的散列,用戶的ID和用戶的IP地址。這樣,如果請求來自錯誤的計算機,Cookie將不會有任何好處。雖然IP是可欺騙的。

請記住,當你這樣做時,你就是在短路安全。你在說:「哦,看,你剛從哪裏冒出來,我想我認識你,在這裏,有我的城堡的鑰匙!」這聽起來像我們從營銷人員那裏得到的那種要求,他們不理解關於安全的事情,並且不關心,因爲如果我們被黑客攻擊沒有問題。

相關問題