web-dev-qa-db-fra.com

Quels formats de date puis-je utiliser pour spécifier la date d'expiration lors de la configuration d'un cookie?

J'utilise une fonction qui définit un cookie. Cette fonction permet de lui transmettre le nom du cookie, la valeur du cookie et une date d'expiration supplémentaire du cookie.

la fonction:

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

tilisation:

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

J'ai utilisé la fonction avec le format de date ci-dessus et je pense qu'elle est compatible avec tous les navigateurs, car j'ai testé si le cookie reste après la fermeture de divers navigateurs et leur réouverture. J'ai découvert qu'il y avait des problèmes lors de l'utilisation d'un format comme "15 Jul 2012". Ce format a fonctionné pour moi lors du développement dans Firefox, mais d'autres navigateurs semblaient uniquement définir le cookie comme cookie de session.

Dois-je m'en tenir à ce format: "dim, 15 juil 2012 00:00:01 GMT" ou existe-t-il d'autres formats que je pourrais utiliser pour la date d'expiration qui fonctionneront sur les principaux navigateurs (IE 7-9 , Firefox, Chrome, Opera, Safari)?

MODIFIER/METTRE À JOUR:

Les cookies nécessitent que la date d'expiration soit au Format UTC/GMT (voir la réponse ci-dessous).

J'ai modifié ma fonction comme suit afin de convertir toutes les dates passées qui ne sont pas au format correct.

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;
    };
39
Dave Haigh

Sur la base de tests et de lectures supplémentaires, une date au format le format UTC/GMT est requis par les cookies par ex. dim.15 juil.2012 00:00:01 GMT

Par conséquent, toutes les dates dans d'autres formats tels que 15 juil. 2012, ou 15/juil. 2012, ou 15/07/2012, doivent être transmis en tant qu'objet new Date puis via la fonction toUTCString() ou toGMTString().

j'ai donc modifié ma fonction comme suit:

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;
};
36
Dave Haigh

La syntaxe spécifiée dans rfc 6265 pour générer les en-têtes Set-Cookie utilise
rfc1123-date = wkday "," SP date1 SP time SP "GMT" format de date du cookie et donc "Sun, 15 Jul 2012 00:00:01 GMT" travaux.

Si je comprends bien, le algorithme d'analyse reconnaîtrait d'autres formats, par exemple: 00:00:01 15 jul 2012 mais ils ne doivent pas être générés.

3
jfs

Trouvé le format de date ddd, dd MMM yyyy HH':'mm':'ss 'GMT'. Que quelqu'un trouve utile. Aussi très bonne référence ici

2