如果您保存了cookie的值,註銷並重新將該cookie呈現給服務器,它將只會自動登錄您,就好像您從未註銷過一樣。
這是因爲您還可以告訴.NET框架設置持久性身份驗證cookie(默認情況下,您可以通過Login控件的DisplayRememberMe屬性公開的「記住我?」複選框向用戶展示此選項)所以到期日將成爲未來的價值。
當用戶回到網站並且他們的瀏覽器發送cookie時,它們會自動登錄 - 所以您看到的行爲是設計。
如果您需要更安全,最簡單的方法是在登錄控件的OnLoggedIn事件中添加一個方法,並設置一個會話值(即,Session.Add("HasLoggedIn", true)
),您可以再檢查其他地方,如果這不是真的,重定向到登錄頁面:
if (null == Session["HasLoggedIn"] || !(bool)Session["HasLoggedIn"]) {
FormsAuthentication.RedirectToLoginPage();
}
編輯迴應評論:
這就是爲什麼你看到01/01/0001 00:00:00的有效期限 - 在會話結束時將被刪除 - 或者當您關閉瀏覽器時 - 但您看到的內容沒有任何根本性錯誤 - 僅僅因爲您不設置永久性Cookie並不意味着如果您將舊Cookie的副本發送回服務器,它不會將您登錄到服務器。
正如我所說的,如果您想確保用戶每次都必須登錄(或「解決」此問題),請添加您在用戶實際登錄時設置的會話變量,並拒絕所有請求它。
爲第二評論
此外編輯從Explained: Forms Authentication:
認證之後接收到後續請求每次,FormsAuthenticationModule類從認證的cookie中檢索的認證券進行解密它會計算散列值,並比較MAC值以確保cookie未被篡改。最後,驗證表格認證票據內包含的到期時間。
注意 ASP.NET不依賴cookie的截止日期,因爲這個日期很容易被僞造。
所以cookie必須在票證過期之前發送回服務器。
你是如何檢查cookie的失效日期的? – Phaedrus 2009-11-05 18:01:04
閱讀請求和響應Cookie集合 – Jon 2009-11-06 12:15:36