[英]Play framework how do sessions and cookies work?
游戲如何驗證cookie?
cookie看起來像這樣:
PLAY_SESSION = e6443c88da7xxxxxxxxxxxxxxxxxxxxxxxxxxxxx-的userid%3A1
// My logout code
def logout() = Action {
Ok("").withNewSession
}
從文檔中
丟棄整個會話
有特殊操作丟棄整個會話:
Ok("Bye").withNewSession
您沒有指定如何對用戶進行身份驗證,所以我只是猜測,您正在使用簡單的簡單示例。
它使用用戶的id來識別用戶,並檢查是否未操作已簽名的會話cookie,因此如果您將使用適當的簽名重新創建cookie,它仍然有效。
您應該在服務器端為會話密鑰創建一些區域,即。 在DB或內存緩存中(這將比DB快)。 對於每個成功的登錄操作,其密鑰應該是隨機生成的(並且優選地相當長),並且還應該包含用於標識用戶,到期日期等的數據。接下來,您應該將此隨機sess_key
放入Play的會話而不是已登錄用戶或id的電子郵件地址他在DB中的行,並且在注銷和/或到期日期之后應該將其刪除。 在這種情況下,即使您在注銷后丟失cookie,也無法使用非esixting sess_key
正確登錄。
每次重新啟動應用程序時都會清除AFAIR標准內存緩存,以確保刪除DB中的所有sess_keys
,並且可以使用Global對象並在onStart(...)
方法中截斷該表。
我找到了更仔細閱讀文檔並結合不同部分的答案。
會話沒有技術超時。 它在用戶關閉Web瀏覽器時到期。 如果您需要特定應用程序的功能超時,只需將時間戳存儲到用戶會話中,然后根據您的應用程序需要使用它(例如,最長會話持續時間,最長不活動持續時間等)。
重要的是要了解Session和Flash數據不是由服務器存儲,而是使用cookie機制添加到每個后續HTTP請求中。 這意味着數據大小非常有限(最多4 KB),並且您只能存儲字符串值。
所以我擔心如果cookie丟失,任何人都可以登錄服務器以備將來使用。
為確保這一點,我需要做的是添加一個自制的時間戳授權(在cookie中保存時間戳並驗證服務器端)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.