FormsAuthentication非持久性Cookie在MVC 4应用程序中没有过期

时间:2014-01-16 08:23:29

标签: asp.net-mvc-4 forms-authentication

我正在尝试使用以下代码创建表单身份验证cookie。虽然这适用于持久登录,但是当我关闭浏览器会话时,非持久性cookie不会过期并从浏览器中删除。它仍然存在于浏览器中。

public static void SetAuthenticationCookie(string userName, Role role, 
bool isPersistent)
{
 string data = role.RoleName;
 HttpCookie authCookie = FormsAuthentication.GetAuthCookie(userName,isPersistent);
 FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(authCookie.Value);
 FormsAuthenticationTicket newticket = new FormsAuthenticationTicket(
 ticket.Version, ticket.Name, ticket.IssueDate,ticket.Expiration,
 ticket.IsPersistent,data);
  authCookie.Value = FormsAuthentication.Encrypt(newticket);
  HttpContext.Current.Response.Cookies.Add(authCookie);            
}

以下是表单身份验证的web.config条目

<authentication mode="Forms">
  <forms loginUrl="~/Account/Login" cookieless="UseCookies" name=".OneClick" 
  protection="All" slidingExpiration="true" timeout="43200" />
</authentication> 

以下是来自浏览器

的Cookie信息的屏幕截图

Cookie Information

这里有什么我想念的吗?请让我知道

1 个答案:

答案 0 :(得分:0)

我不确定这是否是正确的解决方案。但我发现,即使将cookie到期时间设置为上一个日期时间,也会从web.config设置表单身份验证票证到期,使其行为类似于持久性cookie。所以我尝试设置1分钟作为cookie和票证到期,这使得cookie和票证在超时1分钟后到期。

即使非持久性cookie在浏览器会话结束后也会过期。出于某种原因,保留此cookie,直到表单身份验证cookie过期。

这是解决方案。

public static void SetAuthenticationCookie(string userName, Role role, 
                  bool isPersistent)
{
  string data = role.RoleName;
  HttpCookie authCookie = FormsAuthentication.GetAuthCookie(userName, 
  isPersistent);            

  if (!isPersistent)
  {
     authCookie.Expires = DateTime.Now.AddMinutes(30);
  }

 FormsAuthenticationTicket ticket=FormsAuthentication.Decrypt(authCookie.Value);        
 FormsAuthenticationTicket newticket=
 new FormsAuthenticationTicket(ticket.Version,ticket.Name, ticket.IssueDate,
 authCookie.Expires, ticket.IsPersistent, data);            
 authCookie.Value = FormsAuthentication.Encrypt(newticket);
 HttpContext.Current.Response.Cookies.Add(authCookie);            
}

欢迎提出建议或改进。

由于