持久cookie过期设置为asp.net mvc中的Session?

时间:2013-02-17 14:19:03

标签: asp.net-mvc cookies forms-authentication httpcookie

我正在使用ASP.NET MVC,并且希望能够在返回站点时自动记录某人(与该站点完全相同)。

当用户首次注册或登录时,我按如下方式设置cookie:

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
    1,
    "playerid",
    DateTime.Now, 
    DateTime.Now.AddMinutes(1), //This will be set to a longer period in live...
    true, 
    Username + "|" + item.PlayerID.ToString(), 
    FormsAuthentication.FormsCookiePath);

string encTicket = FormsAuthentication.Encrypt(ticket);
Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));

如果我以用户身份登录进行测试,然后查看Cookies中的Firebug标签,则过期时间设置为Session。如果我关闭浏览器然后回到我的网站,我就不再登录了。这就是我期望当浏览器关闭时会话结束(但这不是我想要发生的事情!)。

但是,如果我登录并浏览该网站,则过了一分钟后,到期时间不再显示为Session,而是显示为实际日期戳。如果我然后关闭浏览器并返回我的网站,我将自动登录。

总之,似乎我的到期时间设置为Session,直到我规定的实际到期日期(在这种情况下为t + 1分钟)并且我一直活跃在网站上(我正在使用滑动到期)。

我有什么想法可以将我的到期时间设置为我在FormsAuthentication票证中说明的内容(而不是显示为Session)?

1 个答案:

答案 0 :(得分:9)

您应该通过设置persistent cookie属性来创建存储在客户端硬盘上的Expires

var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket)
{
    // setting the Expires property to the same value in the future
    // as the forms authentication ticket validity
    Expires = ticket.Expiration
};
Response.Cookies.Add(cookie);

确保您为Cookie和表单身份验证票证指定了相同的到期超时。现在,当您查看FireBug时,您将看到在发布cookie时,将来会设置Expires属性,这将使cookie保持不变并在浏览器重新启动后继续存在:

Set-Cookie: ASPXAUTH=...; Expires=Tue, 15-Jan-2014 21:47:38 GMT; Path=/; HttpOnly