universo una tomografia tiempo tac sol secundarios radiacion puede prime precio hacer españa eliminar efectos despues cuanto como centro causa cancer cada javascript cookies

javascript - una - Cookie se establece dos veces; ¿Cómo eliminar el duplicado?



precio amazon prime españa (5)

Así que tengo un sitio web que utiliza una cookie para recordar el estado actual del diseño en todas las visitas. Todo funcionó muy bien hasta que agregué un botón "Me gusta" de Facebook al sitio que genera enlaces que permiten a los usuarios compartir un determinado estado de la interfaz de usuario (un poco confuso pero no realmente relevante para el problema).

El problema es que cuando visito el sitio a través de uno de estos enlaces de Facebook, parece que se crea una segunda copia de mi cookie de diseño (como en, veo dos cookies con el mismo nombre y diferentes valores). Esto no sería demasiado terrible, excepto que el valor de la cookie duplicada parece estar bloqueado, junto con el hecho de que cuando el usuario regresa al sitio, el navegador recuerda el valor atascado en lugar del valor establecido más recientemente (por lo que es algo así como como hay una cookie "buena" con la que todavía puedo trabajar, y una "mala" que no puedo, y al navegador le gusta recordar la cookie "mala" en lugar de la cookie "buena". Esto rompe la funcionalidad de seguimiento / recuerdo de mi diseño.

Así que hay dos preguntas aquí:

  1. ¿Cómo evito que esto suceda? ¿Por qué sucede esto en primer lugar?
  2. ¿Cómo soluciono los problemas para los usuarios que ya tienen una cookie atascada (sé que solo podría elegir un nombre nuevo para la cookie, pero prefiero hacerlo encontrando una manera de desempacar adecuadamente la cookie atascada)?

Si uso la consola de desarrollador de Chrome después de visitar la página en un estado bloqueado, puedo ver que document.cookie es (formato agregado para facilitar la lectura):

layoutState=[{''id'':6,''x'':8,''y'':1525,''z'':4,''url'':''undefined''}, {''id'':1,''x'':625,''y'':709,''z'':2,''url'':''undefined''}, {''id'':2,''x'':8,''y'':37,''z'':3,''url'':''undefined''}, {''id'':3,''x'':625,''y'':1179,''z'':5,''url'':''undefined''}, {''id'':4,''x'':626,''y'':37,''z'':1,''url'':''undefined''}, {''id'':5,''x'':626,''y'':357,''z'':1000000,''url'':''http://m.xkcd.com/303/''}]; WibiyaNotification1=1; WibiyaNotification213286=213286; WibiyaNotification213289=213289; wibiya756904_unique_user=1; JSESSIONID=DONTHIJACKMEPLEASE; WibiyaProfile={"toolbar":{"stat":"Max"},"apps":{"openApps":{}},"connectUserNetworks":[null,null,null,null,null,null]}; WibiyaLoads=59; layoutState=[{''id'':6,''x'':8,''y'':1525,''z'':4,''url'':''undefined''}, {''id'':1,''x'':625,''y'':709,''z'':2,''url'':''undefined''}, {''id'':2,''x'':8,''y'':37,''z'':3,''url'':''undefined''}, {''id'':3,''x'':625,''y'':1179,''z'':5,''url'':''undefined''}, {''id'':4,''x'':626,''y'':37,''z'':1,''url'':''undefined''}, {''id'':5,''x'':626,''y'':357,''z'':6,''url'':''http://m.xkcd.com/303/''}]"

Ignora las cookies de Wibiya y el JSESSIONID. La cookie atascada es la primera instancia de ''layoutState'', y la que todavía puedo manipular en JavaScript es la segunda instancia de ''layoutState''. Esto es lo que obtengo si cambio algunas cosas en torno a:

layoutState=[{''id'':6,''x'':8,''y'':1525,''z'':4,''url'':''undefined''}, {''id'':1,''x'':625,''y'':709,''z'':2,''url'':''undefined''}, {''id'':2,''x'':8,''y'':37,''z'':3,''url'':''undefined''}, {''id'':3,''x'':625,''y'':1179,''z'':5,''url'':''undefined''}, {''id'':4,''x'':626,''y'':37,''z'':1,''url'':''undefined''}, {''id'':5,''x'':626,''y'':357,''z'':1000000,''url'':''http://m.xkcd.com/303/''}]; WibiyaNotification1=1; WibiyaNotification213286=213286; WibiyaNotification213289=213289; wibiya756904_unique_user=1; JSESSIONID=DONTHIJACKMEPLEASE; WibiyaProfile={"toolbar":{"stat":"Max"},"apps":{"openApps":{}},"connectUserNetworks":[null,null,null,null,null,null]}; WibiyaLoads=59; layoutState=[{''id'':1,''x'':8,''y'':39,''z'':1000000,''url'':''undefined''}]

El segundo ''layoutState'' tiene la información correcta que quiero que el navegador recuerde. Sin embargo, lo que el navegador realmente recuerda es el valor de la primera instancia.

He intentado desarmar la cookie por completo, lo que hace que la segunda instancia desaparezca, pero nada de lo que hago parece deshacerse de la primera instancia. Tengo el mismo comportamiento en todos los navegadores principales (Chrome, Firefox, IE), lo que me hace sospechar que debo estar haciendo algo fundamentalmente incorrecto aquí, pero no estoy seguro de qué es.

Puedes ver el sitio en sí aquí . O haga clic aquí para acceder a él a través de un enlace de Facebook (debe generar una cookie atascada). Cualquier ayuda es muy apreciada.

Actualizar:

Así que los pasos para reproducir el error de manera confiable son los siguientes:

  1. Visite el sitio a través del enlace de Facebook
  2. Realice algunos cambios en el diseño y, a continuación, cierre la pestaña.
  3. Visite el sitio a través de la URL normal .
  4. El diseño de la visita inicial debe recordarse correctamente, así que cambie algunas cosas y luego actualice la página. Cuando la página se vuelva a cargar, sus cambios ya no serán recordados.

También me he dado cuenta de que volver a visitar el sitio a través de la URL de estilo Facebook puede borrar / restablecer la cookie atascada. Así que es como si el navegador mantuviera una cookie separada para cada ruta URL, o algo así, y no permitiera que la página raíz acceda a la cookie que estaba configurada en la otra ruta URL. Pensé que podría solucionar este problema estableciendo explícitamente path=/ en la cookie, pero no los dados.

Actualización 2:

Descubrí que si configuro la ruta y el dominio de la cookie, obtengo un comportamiento diferente en todos los navegadores:

  1. Firefox - Funciona correctamente ahora, ¡hurra! Trabajó correctamente una vez, luego se rompió, abucheo!
  2. Chrome - Sin cambios
  3. IE: parece que se mantienen cookies separadas para cada URL, por lo que la URL de estilo de Facebook recuerda un estado, y la URL estándar recuerda un estado diferente. Ambos se actualizan correctamente e independientemente uno del otro. Esto es un poco raro, pero aún así es mejor que el estado bloqueado / roto.

Amigo (tte), hay inconsistencias y un error en su configurador de cookies.

1. Asegúrate de que la ruta y el dominio estén correctamente configurados

La ruta y el dominio deben ser los mismos para eliminar la cookie y configurarla. Vea su código aquí:

document.cookie = c_name + "=; expires=Fri, 31 Dec 1999 23:59:59 GMT;";

y compararlo con:

var c_value=escape(value) + "; expires=" + exdate.toUTCString(); + "; path=/spring; domain=aroth.no-ip.org";

Verás que el colocador tiene ambos, pero el eliminador no. Va a provocar el caos.

2. Ah, y ese desagradable punto y coma.

Esa segunda línea de código que cité arriba, tiene un punto y coma introducido en medio de una expresión de concatenación de cadenas. Justo después de exdate.toUTCString() . Mátalo. Mátalo ... ahora.

Al menos en mi Google Chrome, logré que funcionara correctamente, si establecía un punto de interrupción en json = "[" + json + "]"; y modifica setCookie antes de que se ejecute.

P / S: fue una experiencia de depuración de bizzare, donde logré establecer 4 cookies de layoutState de layoutState , al jugar con la ruta y el dominio.


De nuevo queda el problema después de identificar el problema y tomar la prevención configurando correctamente la cookie.
También debe eliminar las cookies previamente establecidas incorrectamente en su navegador o en el navegador de su cliente.

Así que observe el conjunto de cookies de las herramientas del desarrollador y busque la ruta y el subdominio y póngalos en su código para eliminarlos.

function eraseCookie(c_name) { document.cookie = c_name + "=; expires=Fri, 31 Dec 1999 23:59:59 GMT;"; } function eraseCookieWithPathDomain(c_name) { document.cookie = c_name + "=; expires=Fri, 31 Dec 1999 23:59:59 GMT;path=/yourpath/to; domain=sub.domain.com"; //you can remove this function call on your second upload if you are confirm that the previous cookie setter expired }

Es posible que deba llamar a la función eraseCookieWithPathDomain justo después de eraseCookie o incluso cada vez que se cargue un documento, según su aplicación.


Esto puede ser demasiado simple, pero por si acaso, ¿se registran las cookies para dos rutas diferentes? Si la URL es diferente, puede que esté configurando sus cookies para una ruta restringida, por lo que el sistema las tomaría de manera diferente.


Parece que el problema no es una cookie duplicada (las cookies se sobrescriben a sí mismas) sino una duplicación de los DATOS en su cookie.

Creo que tendrá que modificar el script que lee la cookie y eliminar el valor duplicado si se detecta.


compruebe en la Chrome console -> Resources si su página se carga dos veces. Esa sería la razón de doble cookie.