Подтвердить что ты не робот

Какие форматы дат можно использовать при указании даты истечения срока действия при настройке файла cookie?

Я использую функцию, которая устанавливает cookie. Эта функция позволяет указать имя файла cookie, значение cookie и дополнительную дату истечения срока действия файла cookie.

функция:

function setCookie(name, value, exdate) {
    var c_value = escape(value) + ((exdate === null || exdate === undefined) ? "" : "; expires=" + exdate);
    document.cookie = name + "=" + c_value;
};

использование:

setCookie("my-cookie-name","my-value","Sun, 15 Jul 2012 00:00:01 GMT");

Я использовал функцию с форматом даты выше и считаю, что он совместим с перекрестным браузером, поскольку я тестировал, если файл cookie остается после закрытия различных браузеров и их повторного открытия. Я обнаружил, что были проблемы при использовании формата типа "15 Jul 2012". Этот формат работал у меня во время разработки в firefox, но другие браузеры только, казалось, устанавливали cookie как cookie сеанса.

Должен ли я использовать только этот формат: "Sun, 15 июля 2012 00:00:01 GMT" или есть другие форматы, которые я мог бы использовать для даты истечения срока действия, которая будет работать во всех основных браузерах (IE 7 -9, Firefox, Chrome, Opera, Safari)?

EDIT/UPDATE:

Для файлов cookie требуется, чтобы дата истечения срока действия находилась в формате UTC/GMT (см. ответ ниже).

Я отредактировал мою функцию следующим образом, чтобы преобразовать любые даты, прошедшие в том, что они не находятся в формате corect.

function setCookie(name, value, exdate) {
        //If exdate exists then pass it as a new Date and convert to UTC format
        (exdate) && (exdate = new Date(exdate).toUTCString());
        var c_value = escape(value) + ((exdate === null || exdate === undefined) ? "" : "; expires=" + exdate);
        document.cookie = name + "=" + c_value;
    };
4b9b3361

Ответ 1

Основываясь на тестировании и дальнейшем чтении, дата в формате UTC/GMT требуется с помощью файлов cookie, например. Солнце, 15 июля 2012 00:00:01 GMT

Поэтому любые даты в других форматах, таких как 15 июля 2012, или 15/июль/2012, или 07/15/2012 должны быть переданы как объект new Date, а затем через функцию toUTCString() или toGMTString().

, поэтому я отредактировал свою функцию следующим образом:

function setCookie(name, value, exdate) {
    //If exdate exists then pass it as a new Date and convert to UTC format
    (exdate) && (exdate = new Date(exdate).toUTCString());
    var c_value = escape(value) + ((exdate === null || exdate === undefined) ? "" : "; expires=" + exdate);
    document.cookie = name + "=" + c_value;
};

Ответ 2

Синтаксис, указанный в rfc 6265 для генерации заголовков Set-Cookie, использует rfc1123-date = wkday "," SP date1 SP time SP "GMT" Формат даты cookie и, следовательно, "Sun, 15 Jul 2012 00:00:01 GMT" работает.

Если я правильно понимаю, алгоритм синтаксического анализа распознает другие форматы, например: 00:00:01 15 jul 2012, но они не должны генерироваться.

Ответ 3

Нашел формат даты ddd, dd MMM yyyy HH':'mm':'ss 'GMT'. Пусть кто-нибудь найдет это полезным. Также очень хорошая ссылка здесь