javascript - tomar - La caducidad de la cookie no funciona, ¿está mal?
medicamento caducado 3 meses (1)
Así que estoy usando este código para soltar una cookie y hacer que la página se redirija si ya se ha visitado:
<script language="JavaScript"><!--
function Get_Cookie(name) {
var start = document.cookie.indexOf(name+"=");
var len = start+name.length+1;
if ((!start) && (name != document.cookie.substring(0,name.length))) return null;
if (start == -1) return null;
var end = document.cookie.indexOf(";",len);
if (end == -1) end = document.cookie.length;
return unescape(document.cookie.substring(len,end));
}
function Set_Cookie(name,value,expires,path,domain,secure) {
document.cookie = name + "=" +escape(value) +
( (expires) ? ";expires=" + expires.toGMTString() : "") +
( (path) ? ";path=" + path : "") +
( (domain) ? ";domain=" + domain : "") +
( (secure) ? ";secure" : "");
}
function Delete_Cookie(name,path,domain) {
if (Get_Cookie(name)) document.cookie = name + "=" +
( (path) ? ";path=" + path : "") +
( (domain) ? ";domain=" + domain : "") +
";expires=Thu, 01-Jan-1970 00:00:01 GMT";
}
var mainUrl = ''noflash.html'';
var days = 365; // valid one year from now
function isCookieEnabled() {
if (document.all) return navigator.cookieEnabled;
Set_Cookie(''testcookie'',today.getTime());
var tc = Get_Cookie(''testcookie'');
Delete_Cookie(''testcookie'');
return (tc == today.getTime());
}
var today = new Date();
var zero_date = new Date(0,0,0);
today.setTime(today.getTime() - zero_date.getTime());
var todays_date = new Date(today.getYear(),today.getMonth(),today.getDate(),0,0,0);
var expires_date = new Date(todays_date.getTime() + (days * 86400000));
var beenHere = Get_Cookie(''beenHere'');
if (beenHere == ''yes'') {
if (document.images) window.location.replace(mainUrl);
else window.location = mainUrl;
}
else if (isCookieEnabled()) Set_Cookie(''beenHere'',''yes'', expires_date);
//--></script>
Funciona bien, revisé las cookies, y se crea, y después de visitar la página una vez, me redirigen, pero el problema es la caducidad, dice que es cuando el navegador está cerrado, que no es lo que debería hacer (1 año a partir de ahora).
Es el código mal?
La función ".toGMTString ()" no da cadenas de fechas en el formato requerido para la sintaxis de cookies. Su fecha codificada para la función "borrar" es correcta, pero intente
alert(new Date().toGMTString())
y mira lo que obtienes, sin guiones entre las partes de la fecha.
Otras notas no relevantes: no necesita un atributo de "idioma" en su etiqueta <script>
, y tampoco necesita el comentario HTML anticuado en el cuerpo del script; que dejó de ser necesario hace unos 12 años.
editar - para ser un poco más útil, para obtener una fecha amigable para las cookies, probablemente yo mismo me haya puesto el hilo.
function cookieDate(d) {
function d2(n) { return n < 10 ? ''0'' + n : n; }
var days = [''Sun'', ''Mon'', ''Tue'', ''Wed'', ''Thu'', ''Fri'', ''Sat''],
months = [''Jan'', ''Feb'', ''Mar'', ''Apr'', ''May'', ''Jun'', ''Jul'', ''Aug'', ''Sep'', ''Oct'', ''Nov'', ''Dec''];
return '''' +
days[d.getUTCDay()] + '', '' +
d2(d.getUTCDate()) + ''-'' +
months[d.getUTCMonth()] + ''-'' +
d.getUTCFullYear() + '' '' +
d2(d.getUTCHours()) + '':'' +
d2(d.getUTCMinutes()) + '':'' +
d2(d.getUTCSeconds()) + '' GMT'';
}
Luego puede llamar a "cookieDate (someDate)" para obtener una buena secuencia.