2012-06-21 19 views
26

Estoy usando una función que establece una cookie. Esta función permite ingresar el nombre de la cookie, el valor de la cookie y una fecha de vencimiento adicional de la cookie.¿Qué formatos de fecha puedo usar al especificar la fecha de caducidad al configurar una cookie?

la función:

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

uso:

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

he utilizado la función con el formato de fecha anterior y creo que es compatible con navegadores como he probado si el la cookie permanece después de cerrar varios navegadores y volver a abrirlos. Descubrí que había problemas al usar un formato como "15 Jul 2012". Este formato funcionó para mí durante el desarrollo en Firefox, pero otros navegadores solo parecían configurar la cookie como una cookie de sesión.

Debo seguir usando este formato: "dom, 15 jul 2012 00:00:01 GMT" o hay otros formatos que podría utilizar para la fecha de caducidad que funcionará en los principales navegadores (IE 7- 9, Firefox, Chrome, Opera, Safari)?

EDIT/UPDATE:

Galletas requiere la fecha de caducidad que estar en formato UTC/GMT (véase la respuesta más abajo).

He editado mi función a lo siguiente para convertir las fechas pasadas que no están en el formato 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; 
    }; 

Respuesta

26

Basado en las pruebas de lectura y más en esto, una fecha en un formato/GMT UTC es requerido por las galletas, por ejemploSun 15 Jul 2012 00:00:01 GMT

por lo tanto cualquier fechas en otros formatos, como 15 Jul 2012 o 15/Jul/2012 o 07/15/2012, tienen para pasar como un objeto new Date y luego a través de la función toUTCString() o toGMTString().

Por tanto, he editado mi función a lo siguiente:

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; 
}; 
0

Encontró el formato de fecha MMMM dd, aaaa, hh: mm: ss aaa. Que alguien encuentre es útil. También muy buen enlace aquí enter link description here

Cuestiones relacionadas