Asp.net

瀏覽器關閉後刪除身份驗證/會話 cookie

  • June 26, 2011

瀏覽器關閉後 cookie 持續存在所需的具體步驟是什麼?目前我有:

  1. createPersistentCookie設置為true事件LoggedIn
  2. 指定的機器密鑰。
  3. 表單滑動到期設置為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);

現在,當瀏覽器再次打開時,會話被正確辨識並恢復使用者會話。

引用自:https://stackoverflow.com/questions/3102241