我的cookie什么时候会过期?

时间:2015-07-20 21:17:21

标签: c# asp.net cookies

我在加利福尼亚州的服务器上运行了一个ASP.NET应用程序。服务器的当前时间是:

  • 7/20/2015 14:00 UTC-08:00

Bob已连接到我的服务器。鲍勃在德克萨斯州。他现在的时间是:

  • 7/20/2015 16:00 UTC-06:00

我的应用程序会创建一个cookie并设置其到期日期。

var name = "MyName";
var value = "MyValue"
var hoursToLive = 24;

var myCookie = new HttpCookie(name )
{
    Value = value,
    Expires = DateTime.Now.AddHours(hoursToLive)
};

由于Bob和服务器之间的时差,cookie会在24小时后到期,还是会在22小时后到期?我知道DateTime.Now uses the server's local time,但我不清楚浏览器如何确定cookie过期(具体来说,用什么时区来确定过期时间)。

1 个答案:

答案 0 :(得分:14)

Cookie包含带有expires标题(主要是GMT)的时区信息,这使得客户端可以非常简单地处理服务器实际时区的偏移量。

示例:expires=Mon,20-Jul-2015 22:00:00 GMT如果2015-07-20 14:00:00 UTC-8是服务器的时间。当客户端或服务器决定cookie是否过期时,它会将其与相关的GMT时间进行比较。

我深入研究了System.Web.HttpCookie的代码,并在GetSetCookieHeader()中找到了相关代码:

        if (_expirationSet && _expires != DateTime.MinValue) {
            s.Append("; expires=");
            s.Append(HttpUtility.FormatHttpCookieDateTime(_expires));
        }

HttpUtility.FormatHttpCookieDateTime()返回UTC时间戳(没有偏移量,因为偏移量为零而无关紧要)。

对于大多数目的,格林威治标准时间(GMT)和协调世界时(UTC)可以被认为是相同的。您可以阅读有关此here的更多信息。