uso obtener mostrar modificar manejar las ejemplo definir cookie con http cookies subdomain

http - obtener - mostrar cookies javascript



Compartir cookie entre subdominio y dominio (5)

Tengo dos preguntas. Entiendo que si especifico el dominio como .mydomain.com (con el punto .mydomain.com ) en la cookie, todos los subdominios pueden compartir una cookie.

¿Puede subdomain.mydomain.com acceder a una cookie creada en mydomain.com (sin el subdominio www )?

¿Puede mydomain.com (sin el subdominio www ) acceder a la cookie si se crea en subdomain.mydomain.com ?


Aquí hay un ejemplo que utiliza la API de cookies DOM ( https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie ), para que podamos ver por nosotros mismos el comportamiento.

Si ejecutamos el siguiente JavaScript:

document.cookie = "clave = valor"

Parece ser lo mismo que ejecutar:

document.cookie = "clave = valor; dominio = midominio.com"

La clave de cookie estará disponible (solo) en el dominio mydomain.com .

Ahora, si ejecuta el siguiente JavaScript en mydomain.com:

document.cookie = "clave = valor; dominio = .dominio.com"

La clave de cookie estará disponible para mydomain.com y también para subdomain.mydomain.com .

Finalmente, si intentara ejecutar lo siguiente en subdominio.dominio.com:

document.cookie = "clave = valor; dominio = .dominio.com"

¿La clave de cookie está disponible para subdominio.dominio.com ? Me sorprendió un poco que esto estuviera permitido; Yo había asumido que sería una violación de seguridad para un subdominio poder establecer una cookie en un dominio principal.


En ambos casos, sí, y este es el comportamiento predeterminado tanto para IE como para Edge.

Las otras respuestas agregan información valiosa, pero describen principalmente el comportamiento en Chrome. es importante tener en cuenta que el comportamiento es completamente diferente en IE. El muy útil script de prueba de CMBuckley demuestra que en (digamos) Chrome, las cookies no se comparten entre la raíz y los subdominios cuando no se especifica ningún dominio. Sin embargo, la misma prueba en IE muestra que son compartidos. Este caso de IE está más cerca de la descripción para llevar a casa en el enlace www-or-not-www de CMBuckley. Sé que este es el caso porque tenemos un sistema que utiliza diferentes cookies de paquetes de servicio tanto en la raíz como en el subdominio. Todo funcionó bien hasta que alguien accedió a él en IE y los dos sistemas pelearon por qué cookie de sesión ganaría hasta que explotáramos el caché.


Los 2 dominios mydomain.com y subdomain.mydomain.com solo pueden compartir cookies si el dominio tiene un nombre explícito en el encabezado Set-Cookie . De lo contrario, el alcance de la cookie está restringido al host de solicitud. (Esto se conoce como una "cookie de solo host". Consulte ¿Qué es una cookie de solo host? )

Por ejemplo, si enviaste el siguiente encabezado desde subdomain.mydomain.com :

Set-Cookie: name=value

Entonces la cookie no será enviada para solicitudes a mydomain.com . Sin embargo, si usa lo siguiente, se podrá usar en ambos dominios:

Set-Cookie: name=value; domain=mydomain.com

En RFC 2109 , un dominio sin un punto inicial significaba que no podía usarse en subdominios, y solo un punto .mydomain.com ( .mydomain.com ) permitiría su uso en múltiples subdominios (pero no en el dominio de nivel superior, por lo que lo que pides no fue posible en la especificación anterior).

Sin embargo, todos los navegadores modernos respetan la nueva especificación RFC 6265 , e ignorarán cualquier punto destacado, lo que significa que puede usar la cookie en subdominios, así como en el dominio de nivel superior.

En resumen, si configura una cookie como el segundo ejemplo anterior desde mydomain.com , sería accesible por subdomain.mydomain.com y viceversa.

Ver también:


No estoy seguro de que la respuesta de @cmbuckley muestre la imagen completa. Lo que leo es:

A menos que los atributos de la cookie indiquen lo contrario, la cookie se devuelve solo al servidor de origen (y no, por ejemplo, a ningún subdominio), y caduca al final de la sesión actual (según lo define el agente del usuario). Los agentes de usuario ignoran las cookies no reconocidas.

RFC 6265

también

8.6. Weak Integrity Cookies do not provide integrity guarantees for sibling domains (and their subdomains). For example, consider foo.example.com and bar.example.com. The foo.example.com server can set a cookie with a Domain attribute of "example.com" (possibly overwriting an existing "example.com" cookie set by bar.example.com), and the user agent will include that cookie in HTTP requests to bar.example.com. In the worst case, bar.example.com will be unable to distinguish this cookie from a cookie it set itself. The foo.example.com server might be able to leverage this ability to mount an attack against bar.example.com.

Para mí, eso significa que usted puede proteger las cookies para que no sean leídas por el subdominio / dominio, pero no puede evitar la escritura de cookies en otros dominios. Entonces, alguien puede volver a escribir las cookies de su sitio controlando otro subdominio visitado por el mismo navegador. Lo que podría no ser una gran preocupación.

Impresionante sitio de prueba de cookies provisto por @cmbuckley / para aquellos que se lo perdieron en su respuesta como yo; vale la pena desplazarse hacia arriba y upvoting /:


Solución simple

setcookie("NAME", "VALUE", time()+3600, ''/'', EXAMPLE.COM);

El quinto parámetro de Setcookie determina los (sub) dominios a los que está disponible la cookie. Establecerlo en (EXAMPLE.COM) lo pone a disposición de cualquier subdominio (por ejemplo: SUBDOMAIN.EXAMPLE.COM)

Referencia: http://php.net/manual/en/function.setcookie.php