FormsAuthenticationTicket vs HttpCookie到期日期

时间:2018-10-16 22:02:21

标签: c# .net cookies model-view-controller formsauthenticationticket

我正在尝试在Web应用程序中实现以下方案:

  1. 当用户未使用“记住我”选项登录时,我将使cookie不再持久,以便在他们关闭浏览器时将其注销。我还将过期时间设置为10分钟。
  2. 当用户使用“记住我”选项登录时,我将使cookie永久保存,以使他们在关闭浏览器时不会丢失cookie。我将过期时间设置为1个月。

以下是我目前正在编写的代码:

HttpCookie cookie = FormsAuthentication.GetAuthCookie(loginView.UserName, loginView.RememberMe);
DateTime ExpirationTime = loginView.RememberMe == true ? DateTime.Now.AddMonths(1) : DateTime.Now.AddMinutes(10);
cookie.Name = "Cookie1";

string userData = JsonConvert.SerializeObject(userModel);
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket
(
    1, loginView.Username, DateTime.Now, ExpirationTime, loginView.RememberMe, userData, FormsAuthentication.FormsCookiePath
);
string enTicket = FormsAuthentication.Encrypt(authTicket);

cookie.Value = enTicket;
Response.Cookies.Add(cookie);

在Global.asax中登录后,我从cookie中获取所有loginView用户数据并将其存储在CustomPrincipal类中。

“记住我”机制按预期工作。但是问题是票证似乎没有过期,我也从未注销(我一直在等待尝试查看afk时是否注销)。根据{{​​3}}

,当我手动设置Cookie的过期日期时,超时效果很好,但是我却失去了“记住我”机制...
  

对于非持久性cookie,如果票证已过期,则cookie   也会过期,并且用户将被重定向到登录页面。

我觉得我想念一些东西...

0 个答案:

没有答案