2011-03-29 35 views
1

我很難將我已閱讀過的主題的各個主題拼湊在一起,所以我很想知道在我走得太遠之前我是否在正確的軌道上。我正在嘗試使用會話和Cookie等進行持久登錄。在這一點上,我覺得自己已經掌握了登錄順序,現在我只有一個用戶數據庫,但是我會盡量在以後處理OAuth。在GAE/J中使用會話

登錄:

  1. 用戶輸入憑據
  2. Creds被異步發送到服務器(最好是通過SSL,最終)
  3. 密碼不被存儲,只有哈希保持
  4. 如果creds都OK ,服務器將this.getThreadLocalRequest().getSession().getId()的值發送回
  5. 回調方法將sessionID保存在cookie中並相應地修改用戶界面
  6. (註銷方法清除cookie並調用this.getThreadLocalRequest().getSession().invalidate()

時,我希望用戶能夠回來,拿起他們離開的地方,而無需重新登錄我迷路。我得到的SessionID回從cookie(如果有的話),然後我需要問服務器驗證它是有效的。是否有一個方法需要一個會話ID並返回它是否是一個有效的會話?或者我不知何故告訴當前會話使用該ID?

最終目標是我希望將會話ID包含在RPC調用中,該調用應該僅限於登錄用戶,並且服務器端方法將在運行之前驗證由RPC接收的sid。我不必保留一個有效的sid列表,對吧?這已經被GAE處理(是的,我有<sessions-enabled>集)

回答

0
this.getThreadLocalRequest().getSession(false) 

返回與此請求相關的當前HttpSession並返回null的情況下,沒有有效HttpSession

+0

我已經看到了這個代碼,但我想我沒有明白它的意思。 .getSession()告訴我會話ID,我可以存儲它。但是當我恢復會話時,我不需要設置會話ID嗎? – ASTX813 2011-03-30 02:42:08

+0

你是什麼意思*我正在恢復會議*? – systempuntoout 2011-03-30 08:56:42

+0

登錄後,做你的事情,關閉瀏覽器,稍後重新打開瀏覽器,仍然登錄。想通過保存JSESSIONID cookie到期,我覆蓋了瀏覽器關閉時即將過期的cookie。 – ASTX813 2011-04-01 01:44:57

1

getSession返回可用於跨請求持久存儲的會話對象。它已經使用cookie來在請求之間保持會話ID。您不需要獲取會話ID並將其單獨存儲在另一個Cookie中。

如果要將數據與數據庫中的用戶相關聯,可以將其與會話ID相關聯(例如,將ID包含在實體中並按ID查找),如果希望將其範圍限定爲當前會話,或將其與用戶標識相關聯。

除非你有真正有吸引力的理由來發明自己的用戶管理,不過,你真的應該使用內置的Google帳戶或OpenID支持。您不會通過強制他們爲您的網站創建另一個帳戶來爲用戶提供服務。