57

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 Jul 2012 00:00:01 GMT"または、主要なブラウザー (IE 7-9、Firefox、Chrome、Opera、Safari) で機能する、有効期限に使用できる他の形式はありますか?

4

3 に答える 3

54

テストとこれへのさらなる読み取りに基づいて、CookieにはUTC / GMT形式の日付が必要です(例:Sun、2012年7月15日00:00:01 GMT)

したがって、2012年7月15日、2012年7月15日、2012年7月15日など、他の形式の日付は、オブジェクトとして渡されてから、または関数を介して渡される必要があります。new DatetoUTCString()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;
};
于 2012-06-21T12:52:05.860 に答える
7

Set-Cookie ヘッダーを生成するために RFC 6265 で指定されている構文は、
rfc1123-date = wkday "," SP date1 SP time SP "GMT" Cookie の日付形式を使用するため、"Sun, 15 Jul 2012 00:00:01 GMT"機能します。

私がそれを正しく理解していれば、解析アルゴリズムは他の形式を認識します。たとえば 00:00:01 15 jul 2012、これらは生成されるべきではありません。

于 2016-05-08T21:23:53.450 に答える