根据this SO question中的示例,我的印象是,如果您在已过期的Cookie上调用FormsAuthentication.Decrypt(authCookie.Value)
,则解密仍然有效,我将能够获取值{ {1}}(假设它存在于cookie中),但值ticket.UserData
将为真。
我想确认事实确实如此。如果没有,当您解密并过期cookie时会发生什么?我已经尝试过自己测试,我已经阅读了文档,但我很感谢C#专家的确认,因为我是C#的新手。
感谢。
答案 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,它就没有过期,所以它应该是可解密的