ASP.NET表单身份验证Cookie - 更改用户

3
我正在使用以下代码创建表单身份验证 cookie:

我正在使用以下代码创建表单身份验证 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个回答

2

FormsAuthentication.FormsCookieName设置了cookie的名称,因此只要您将其命名为FormsAuthentication.FormsCookieName,就永远只有一个身份验证cookie。


正确,执行Cookies.Add(name)将创建或覆盖具有相同名称(和域)的任何cookie。 - Chris Marisic

-1

在登录页面加载或即将创建新Cookie时,清除响应Cookie通常是一个好的实践:Response.Cookies.Clear();,这样可以在添加新票证之前清除现有用户的票证。

话虽如此,由于您手动创建Cookie并将其添加到响应中,因此您的响应将具有2个Cookie(针对2个用户)。


但是,FormsAuthentication.FormsCookieName 不会是唯一的吗?这不会导致第二个 cookie 覆盖客户端上的第一个吗? - Journeyman
-1 不,只会有一个cookie。此外,我大约95%的确定性是执行Response.Cookies.Clear()将什么也不做,但会删除您在当前请求期间添加到Cookies集合中的任何cookie。如果您想从用户中删除cookie,则必须使用与要删除的cookie相同名称的cookie将其添加到响应中,并将其作为过去设置的永久cookie(具有过期日期)发送下来。 - Chris Marisic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接