FormsAuthentication.Decrypt会处理过期的值吗?

时间:2015-01-29 17:21:54

标签: c# .net cookies

根据this SO question中的示例,我的印象是,如果您在已过期的Cookie上调用FormsAuthentication.Decrypt(authCookie.Value),则解密仍然有效,我将能够获取值{ {1}}(假设它存在于cookie中),但值ticket.UserData将为真。

我想确认事实确实如此。如果没有,当您解密并过期cookie时会发生什么?我已经尝试过自己测试,我已经阅读了文档,但我很感谢C#专家的确认,因为我是C#的新手。

感谢。

1 个答案:

答案 0 :(得分:1)

An expired cookie is not sent to the server by the client

  

您可能还想指定Cookie的到期日期和时间。   Cookie通常会写入用户的磁盘   可能永远存在。因此,您可以指定日期和   Cookie过期的时间。当用户访问您的网站时   再次,浏览器首先检查您的cookie集合   现场。如果cookie已过期,则浏览器不会发送该cookie   具有页面请求的服务器的特定cookie;相反,   已过期的cookie已删除。

因此,如果你收到一个cookie,那就是它当时没有过期而且FormsAuthentication.Decrypt(authCookie.Value)会起作用。

以下是一些代码,显示到期日期不会更改您从Cookie中恢复的故障单数据:

var creationDate = DateTime.Now;
var expirationDate = creationDate.AddSeconds(5);

var ticket = new FormsAuthenticationTicket(1, "ticket", creationDate,
    expirationDate, false, "userData");

var cookie = new Cookie("cookie",
    FormsAuthentication.Encrypt(ticket));
cookie.Expires = expirationDate;

Console.WriteLine("Cookie value: {0}", cookie.Value);
Console.WriteLine("Ticket has expired? {0}", ticket.Expired.ToString());
Console.WriteLine("Ticket userData: {0}", ticket.UserData);

System.Threading.Thread.Sleep(6000);
Console.WriteLine("Cookie and ticket should have expired");

Console.WriteLine("Cookie value: {0}", cookie.Value);

var decryptedTicket = FormsAuthentication.Decrypt(cookie.Value);
Console.WriteLine("Ticket has expired? {0}", decryptedTicket.Expired.ToString());
Console.WriteLine("Ticket userData: {0}", decryptedTicket.UserData);

最后,如果你收到了cookie,它就没有过期,所以它应该是可解密的