2011-06-07 50 views
3

我使用下面的代碼創建窗體身份驗證Cookie:如果第二個用戶試圖從同一臺客戶機登錄的第一個用戶已註銷之前ASP.NET表單驗證Cookie - 改變用戶

string formsCookieStr = string.Empty; 
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
      1,        // version 
      username,      // user name 
      DateTime.Now,     // issue time 
      DateTime.Now.AddMinutes(30), // expires 
      false,       // Persistence 
      userRoleData     // user data 
    ); 
formsCookieStr = FormsAuthentication.Encrypt(ticket); 
HttpCookie FormsCookie = new HttpCookie(FormsAuthentication.FormsCookieName, formsCookieStr); 
HttpContext.Response.Cookies.Add(FormsCookie); 

,上面的代碼是否會導致客戶端上存在兩個Cookie?如果是這樣,我該如何防止這種情況?謝謝

回答

2

FormsAuthentication.FormsCookieName設置cookie的名稱,所以只存在一個過身份驗證cookie,只要你有FormsAuthentication.FormsCookieName

+0

正確,做Cookies.Add(名稱)將創建或覆蓋具有該名稱(和相同的域)的任何cookie。 – 2011-06-09 12:55:05

-1

在您的登錄頁面加載或即將創建新Cookie時,通常會清除響應Cookie的良好做法:Response.Cookies.Clear();,因此現有的用戶票證​​在添加新票證之前已清除。

說了這麼一句,你的迴應在你的回覆中會有2個cookie(2個用戶),因爲你手動創建了一個Cookie並將其添加到回覆中。

+0

它命名,但不會在FormsAuthentication.FormsCookieName是唯一的,因此第二個cookie將覆蓋第一上客戶端? – Journeyman 2011-06-07 16:38:44

+0

-1否,只有一個cookie。此外,我大約95%確實在做Response.Cookies.Clear()除了在當前請求期間刪除添加到Cookies集合的任何cookie之外,什麼也不做。如果您想從用戶中刪除cookie,您必須將cookie添加到與您要刪除的cookie相同名稱的響應中,並將其作爲過去設置的永久性cookie(過期日期)發送。 – 2011-06-09 12:54:04