瀏覽器關閉後刪除身份驗證/會話 cookie
瀏覽器關閉後 cookie 持續存在所需的具體步驟是什麼?目前我有:
createPersistentCookie設置為true事件LoggedIn。- 指定的機器密鑰。
- 表單滑動到期設置為
true.只要瀏覽器打開,使用者就會保持登錄狀態,但一旦關閉,不管多久,使用者都需要重新登錄。我錯過了什麼?
編輯: 我瀏覽了 marapet 指出的文章(見下面的評論),它讓我對這張票是否確實有 IsPersistent 標誌感興趣,它確實有。解密後的票據是這樣的:
System.Web.Security.FormsAuthentication.Decrypt(Request.Cookies[System.Web.Security.FormsAuthentication.FormsCookieName].Value) {System.Web.Security.FormsAuthenticationTicket} CookiePath: "/" Expiration: {19/08/2010 17:27:14} Expired: false IsPersistent: true IssueDate: {19/07/2010 17:27:14} Name: "alex" UserData: "" Version: 2所有的細節都是正確的,和我在 LoggedIn 事件中設置的相對應。更多的 cookie 值我可以直接從 cookie 中檢索,與這個相同。然而,一旦我關閉瀏覽器,cookie 就會失去。然而,我注意到的是,攜帶票的 cookie 出於某種原因重置了日期。首先,我無法覆蓋 web.config 中的設置,因此在 LoggedIn 事件結束時,它的 Expires 屬性是發布日期後 4000 分鐘,而不是我以程式方式設置的月份。然後在頁面載入後,我使用 FormsAuthentication.FormsCookieName 檢索的 cookie 的 Expires 屬性為 01/01/0001。我想也許這就是問題所在?任何想法將不勝感激。
編輯#2: 我正在更改標題和標籤以包含會話,因為它與問題/解決方案相關
所以我最終找到了解決方案。事實證明,這不是身份驗證 cookie 本身的問題(它被正確保留,或者更確切地說,如果處理程序沒有刪除它,錯誤地決定使用者沒有登錄基於缺失的會話)。問題是會話 cookie 失去了,或者沒有正確辨識。所以解決方法是在登錄期間手動添加會話 cookie,如下所示:
HttpCookie authCookie = new HttpCookie("ASP.NET_SessionId", Session.SessionID); authCookie.Domain = ".mydomain.com"; authCookie.Expires = DateTime.Now.AddMonths(1); Response.Cookies.Add(authCookie);現在,當瀏覽器再次打開時,會話被正確辨識並恢復使用者會話。