No puedo acceder a ninguna cookie desde JavaScript. Necesito leer algún valor y enviarlos a través de JSON para mis controles personalizados.
Intenté acceder a las cookies desde JS, como se describe en:
Como puede ver en el código, se ve tan claro como un cristal el siguiente:
var c_value = document.cookie;
Cuando intento acceder al document.cookie
valor del depurador web de Chrome, solo veo la cadena vacía en las expresiones de Watch :
Entonces no puedo leer el valor de las cookies, que necesito.
Revisé el nombre de la cookie, que estoy enviando para obtener un valor asociado que ES correcto. Además, estoy usando el código fuente de W3Schools para obtener cookies, si está interesado (pero desde el segundo enlace, la técnica es similar).
¿Cómo puedo solucionar mi problema?
document.cookie
la herramienta web de Chrome que muestra todas mis cookies y comprobaciones en la columna Http. ¿Por qué no es accesible desde eldocument.cookie
?Respuestas:
Lo más probable es que se trate de
httponly
cookies.httponly
es una bandera que puede establecer en las cookies, lo que significa que no se puede acceder a ellas mediante JavaScript. Esto es para evitar que los scripts maliciosos roben cookies con datos confidenciales o incluso sesiones completas.Por lo tanto, debe deshabilitar la
httponly
bandera o debe encontrar otra forma de obtener los datos en su javascript.Al mirar su código, debería ser fácil deshabilitar el indicador de solo http:
Response.AddHeader("Set-Cookie", "CookieName=CookieValue; path=/;"); Response.SetCookie(new HttpCookie("session-id") { Value = Guid.NewGuid().ToString(), HttpOnly = false }); Response.SetCookie(new HttpCookie("user-name") { Value = data.Login, HttpOnly = false });
Ahora debería poder acceder a la información de las cookies desde JavaScript. Sin embargo, no sé exactamente qué tipo de datos está tratando de obtener, por lo que tal vez pueda optar por otro enfoque y, por ejemplo, representar algún atributo de datos en la página con la información que necesita en lugar de intentar leer la cookie:
<div id="example" data-info="whatever data you are trying to retrieve"></div>
console.log(document.getElementById('example').getAttribute('data-info'));
fuente
Yo diría que http solo es su primer culpable, pero esto también puede ocurrir si no establece el alcance de su cookie.
Si el sitio ha sido redirigido desde otro dominio, deberá considerar la configuración del alcance de la cookie. El dominio y la ruta definen el alcance de la cookie, a qué URL se debe enviar la cookie. Dependiendo de esto, es posible que no vea la cookie en su respuesta.
Me encontré con este problema al configurar una cookie en un inicio de sesión SAML SSO exitoso y no pude recuperar la cookie del documento porque nunca se envió como parte de la solicitud.
fuente
Preste atención también al atributo Path de la cookie, ya que la cookie solo es visible para los subdirectorios de Path. Tuve tu problema y resolví configurar la ruta "/"
fuente
Tuve el mismo problema varias veces. Y cada vez, fue por una razón diferente.
Diferentes razones:
httpOnly
campo. Estaba configuradofalse
y estaba intentando acceder a él desde la consola. Configurarlotrue
o acceder a él desde el código fuente funcionó.secure
campo. Lo eratrue
y estaba usando solo http.Expires / Max-Age
. La cookie estaba desactualizada y no era visible endocument.cookie
.fuente
Si su cookie está configurada como
Set-Cookie
oSet-Cookie2
no es parte de la colección de encabezados de respuesta: http://www.w3.org/TR/XMLHttpRequest/#the-getallresponseheaders%28%29-methodDevuelve todos los encabezados de la respuesta, con la excepción de aquellos cuyo nombre de campo es Set-Cookie o Set-Cookie2.
fuente
Si está utilizando alguna autenticación segura, en ese caso no podría acceder a las cookies directamente debido a la seguridad. tienes que cambiar algún atributo de respuesta en el lado del servidor usando el siguiente código.
Response.AddHeader("Set-Cookie", "CookieName=CookieValue; path=/;"); Response.SetCookie(new HttpCookie("session-id") { Value = Guid.NewGuid().ToString(), HttpOnly = false }); Response.SetCookie(new HttpCookie("user-name") { Value = data.Login, HttpOnly = false });
Pero no debe hacerlo porque puede cambiar de seguro a no seguro, por lo que debe encontrar una solución que se haga en el lado del servidor para eliminar las cookies y permitirle realizar algunas operaciones.
Es posible hacer cambios en el lado del servidor.
fuente