Когда мой cookie действительно истечет?

У меня есть приложение ASP.NET, работающее на сервере в Калифорнии. Текущее время сервера:

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

Боб подключен к моему серверу. Боб находится в Техасе. Его текущее время:

  • 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)
};

Будет ли срок действия файла cookie истечет через 24 часа или истечет через 22 часа из-за разницы во времени между Бобом и сервером? Я знаю, что DateTime.Now использует локальное время сервера, но я не понимаю, как браузеры решили, что срок действия файла cookie истек (в частности, какой часовой пояс используется для определения истечения срока действия).

Ответ 1

Файлы 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) могут, для большинства целей, считаться одинаковыми. Вы можете прочитать об этом здесь.