2011-06-07 30 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