【问题标题】:Create non-persistent cookie with FormsAuthenticationTicket使用 FormsAuthenticationTicket 创建非持久 cookie
【发布时间】:2010-12-21 14:51:38
【问题描述】:

我在使用 FormsAuthenticationTicket 创建非持久性 cookie 时遇到问题。我想将用户数据存储在票证中,所以我不能使用 FormsAuthentication.SetAuthCookie() 或 FormsAuthentication.GetAuthCookie() 方法。因此,我需要创建 FormsAuthenticationTicket 并将其存储在 HttpCookie 中。

我的代码如下所示:

DateTime expiration = DateTime.Now.AddDays(7);

// Create ticket
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(2,
    user.Email,
    DateTime.Now,
    expiration,
    isPersistent,
    userData,
    FormsAuthentication.FormsCookiePath);

// Create cookie
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(ticket));
cookie.Path = FormsAuthentication.FormsCookiePath;
if (isPersistent)
    cookie.Expires = expiration;

// Add cookie to response
HttpContext.Current.Response.Cookies.Add(cookie);

当变量 isPersistent 为真时,一切正常并且 cookie 被持久化。但是,当 isPersistent 为 false 时,cookie 似乎仍然存在。我在浏览器窗口中登录,然后将其关闭并再次打开浏览器,我仍然处于登录状态。如何将 cookie 设置为非持久性?

非持久性 cookie 与会话 cookie 相同吗? cookie 信息是存储在服务器上的 sessiondata 中还是在每个请求/响应中传输给服务器的 cookie?

【问题讨论】:

    标签: cookies forms-authentication httpcookie


    【解决方案1】:

    尝试删除:

    if (isPersistent) { cookie.Expires = expiration; }

    ...并将其替换为:

    if (!isPersistent) { cookie.Expires = DateTime.Now.AddYears(-1); }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-21
      • 2011-05-28
      • 1970-01-01
      • 2011-03-09
      • 1970-01-01
      • 2015-12-20
      • 1970-01-01
      • 2012-08-21
      相关资源
      最近更新 更多