read - JavaScript Duplicate Cookies
npm js cookies (2)
¿Es por casualidad que la cookie original ya está presente en esto?
btoa(JSON.stringify(_decoded))
Causa de: document.cookie
document.cookie se define como:
una cadena que contiene una lista de todas las cookies separadas por punto y coma
Por lo tanto, me parece que está agregando un nuevo valor separado por punto y coma (nueva cookie) a esa lista (sin eliminar la cookie original)
Ok, no es eso, ¿has probado esto?
Suena como el mismo problema que describiste
Estoy usando el marco Hapi para una aplicación Node.js, y el marco Hapi viene con sus propias herramientas de administración de cookies, que estoy usando para la autenticación.
El marco luego establece una cookie llamada session, con un valor json codificado a base64. El dominio está configurado en example.com (no.ejemplo.com)
Ahora, el problema radica cuando intento editar esta cookie del lado del cliente, haciendo lo siguiente
document.cookie = ''session='' + btoa(JSON.stringify(_decoded)) + "; path=/; domain=example.com";
Esto realmente establece una cookie duplicada con el dominio ''.example.com''
No le he pedido a JavaScript que anteponga el punto, y parece que no puedo deshacerme de él.
Supongo que es por este punto, que la cookie está siendo duplicada. ¿Cómo configuro el dominio sin que se anteponga automáticamente a un punto?
EDITAR
He renunciado a tratar de eliminar el punto inicial y, en cambio, trato de eliminar la cookie anterior y luego crear una nueva. ¡Sin embargo, todavía termino con cookies duplicadas!
- Navegue a / login e ingrese los detalles de inicio de sesión
- Redirigido a / cuenta y cookies establecidas por el servidor (SIN punto principal)
- Ejecute Javascript para eliminar y volver a crear la cookie
- 1 cookie ahora existe y tiene un punto principal antes del dominio
El comportamiento anterior es bueno, sin embargo, también sucede lo siguiente, que es malo
- Navegue a / login e ingrese los detalles de inicio de sesión
- Redirigido a / cuenta y cookies establecidas por el servidor (SIN punto principal)
- Navega a / example
- Ejecute Javascript para eliminar y volver a crear la cookie
- Ahora existen 2 cookies, una con el punto inicial (creado por JS) y otro sin (creado por el servidor)
El código que estoy usando es
API.Session = {
Encoded : function () { return document.cookie.replace(/(?:(?:^|.*;/s*)session/s*/=/s*([^;]*).*$)|^.*$/, "$1")},
Decoded : function () { return JSON.parse(atob(this.Encoded()))},
Update : function (_decoded) {
document.cookie = ''session=; expires=Thu, 01 Jan 1970 00:00:01 GMT;'';
document.cookie = ''session='' + btoa(JSON.stringify(_decoded)) + "; path=/; domain=example.com;";
}
}
API.Helpers.ShowAdvancedOptions = function () {
var s = API.Session.Decoded()
s.ShowAdvancedOptions = true
API.Session.Update(s)
}
Para cualquier persona con un problema similar, esto finalmente se solucionó abandonando la propiedad del dominio por completo. Ver otra pregunta relacionada