Tengo este Javascript para copos de nieve en mi sitio web donde estoy almacenando una cookie para recordar la configuración de activación o desactivación de la nieve del usuario.
Lo que estoy tratando de hacer es configurar la cookie para que caduque el 6 de enero de cada año (después de la noche 12) y la nieve solo está activa entre el 1 de diciembre y el 5 de enero de cada año de todos modos.
Por lo tanto, estoy tratando de configurar la fecha de vencimiento de la cookie para que sea el 6 de enero del próximo año o este año (funcionará para todos los años en adelante sin editar, espero), en función de si el usuario hace clic en la página en diciembre de este año o antes del 5 Enero del próximo año.
He agregado alertas a la página para mostrar el valor de fecha de caducidad después de hacer clic en el botón de alternar y, por lo que puedo ver, el resultado de la fecha UTC está bien, pero cuando miro la fecha de caducidad en la consola de mi navegador, siempre es 1 semana desde que hice clic en el botón, por lo que la fecha de caducidad se establece en + 1 semana, pero no se establece en el 6 de enero del próximo año, aunque el valor de la fecha de caducidad se ve bien en alerta.
Para decidir si el año de vencimiento es este año o el próximo, verifico el valor del mes: si no es cero (es decir, enero), entonces el año de vencimiento es el próximo año; de lo contrario, es este año.
function toggleSnow() { const dateNow = new Date(); let year = dateNow.getYear(); let month = dateNow.getMonth(); var expiryYear; if (month == 0) { expiryYear = year + 1900; } else { expiryYear = year + 1901; } const dayOnExpiry = new Date("Jan 06, " + expiryYear + " 12:00:00"); var expiryDate = dayOnExpiry.toUTCString(); var toggleOnOff = document.getElementById("snowContainer"); var newState = toggleOnOff.nextElementSibling; if (toggleOnOff.classList.toggle("active")) { document.cookie = "Snow=No; Expires=" + expiryDate + "; Path=/; Domain=xxx; Secure; SameSite=Strict; Priority=High"; } else { document.cookie = "Snow=Yes; Expires=" + expiryDate + "; Path=/; Domain=xxx; Secure; SameSite=Strict; Priority=High"; } }¿Por qué la fecha de caducidad de la cookie siempre es + 1 semana y no el 6 de enero, o no estoy haciendo nada malo y es cosa del navegador?
Esto se debe a la prevención de seguimiento inteligente de Safari. Limita ciertas cookies a 7 días de vencimiento. ¿Qué restringe el uso de cookies y otro tipo de almacenamiento del navegador web por parte de ITP? :
- Las cookies de origen creadas por
document.cookiede JavaScript caducan en 7 días. Si se accede a las cookies dentro de esos 7 días, su fecha de vencimiento se extenderá por 7 días.- Las cookies de origen creadas por
document.cookiede JavaScript Y son creadas por un dominio de seguimiento Y la decoración de enlaces de uso caducará en 24 horas. Si se accede a las cookies dentro de las 24 horas, su fecha de vencimiento se extenderá por otras 24 horas.
Entonces, aunque la caducidad se establece en 1 semana, si el usuario continúa accediendo al sitio que usa la cookie, se extenderá automáticamente.