【问题标题】:ASP.NET Forms authentication cookies - changing usersASP.NET Forms 身份验证 cookie - 更改用户
【发布时间】:2011-06-07 16:10:30
【问题描述】:

我正在使用以下代码创建表单身份验证 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 吗?如果是这样,我该如何防止这种情况?谢谢

【问题讨论】:

    标签: asp.net forms-authentication


    【解决方案1】:

    FormsAuthentication.FormsCookieName 设置 cookie 名称,因此只要您使用 FormsAuthentication.FormsCookieName 命名,就只有一个身份验证 cookie

    【讨论】:

    • 正确,执行 Cookies.Add(name) 将创建或覆盖具有该名称(和相同域)的任何 cookie。
    【解决方案2】:

    在您的登录页面加载或即将创建新 Cookie 时清除响应 Cookie 通常是一种好习惯:Response.Cookies.Clear();,因此在添加新票之前清除现有用户票。

    话虽如此,当您手动创建 Cookie 并将其添加到响应中时,您的响应中将有 2 个 cookie(用于 2 个用户)。

    【讨论】:

    • 但是 FormsAuthentication.FormsCookieName 不是唯一的,因此第二个 cookie 会覆盖客户端上的第一个?
    • -1 不,只有一个 cookie。此外,我大约 95% 的把握做 Response.Cookies.Clear() 只会删除您在当前请求期间添加到 Cookies 集合中的任何 cookie。如果您想从用户那里删除 cookie,您必须将 cookie 添加到与您要删除的 cookie 同名的响应中,并将其作为过去设置的永久 cookie(具有到期日期)发送。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    • 1970-01-01
    • 2017-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多