Tengo dos preguntas. Entiendo que si especifico el dominio como .mydomain.com
(con el punto inicial) en la cookie, todos los subdominios pueden compartir una cookie.
¿Se puede subdomain.mydomain.com
acceder a una cookie creada en mydomain.com
(sin el www
subdominio)?
¿Puede mydomain.com
(sin el www
subdominio) acceder a la cookie si se crea en subdomain.mydomain.com
?
Respuestas:
Los dominios 2
mydomain.com
ysubdomain.mydomain.com
sólo pueden compartir las cookies si el dominio es nombrado explícitamente en laSet-Cookie
cabecera. De lo contrario, el alcance de la cookie está restringido al host de la solicitud. (Esto se conoce como "cookie de solo host". Consulte ¿Qué es una cookie de solo host? )Por ejemplo, si envió el siguiente encabezado desde
subdomain.mydomain.com
, entonces la cookie no se enviará para solicitudes amydomain.com
:Sin embargo, si usa lo siguiente, será utilizable en ambos dominios:
Esta cookie se enviará para cualquier subdominio de midominio.com, incluidos los subdominios anidados como
subsub.subdomain.mydomain.com
.En RFC 2109 , un dominio sin un punto inicial significaba que no podía usarse en subdominios, y solo un punto inicial (
.mydomain.com
) permitiría que se usara en múltiples subdominios (pero no en el dominio de nivel superior, así que lo que usted preguntó fue no es posible en la especificación anterior).Sin embargo, todos los navegadores modernos respetan la especificación más reciente RFC 6265 e ignorarán cualquier punto inicial, lo que significa que puede usar la cookie en subdominios y en el dominio de nivel superior.
En resumen, si configura una cookie como el segundo ejemplo anterior
mydomain.com
, sería accesible porsubdomain.mydomain.com
, y viceversa. Esto también se puede utilizar para permitirsub1.mydomain.com
ysub2.mydomain.com
compartir cookies.Ver también:
fuente
domain=.mydomain.com
no es válida para mydomain.com, por lo que los dos RFC no son compatibles entre sí.No estoy seguro de que la respuesta de @cmbuckley muestre la imagen completa. Lo que leo es:
también
Para mí, eso significa que puede proteger las cookies de ser leídas por subdominio / dominio, pero no puede evitar escribir cookies en los otros dominios. Entonces, alguien puede reescribir 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 lo perdieron en su respuesta como yo; vale la pena desplazarse hacia arriba y votar arriba:
fuente
domain
, la cookie solo se usa para el host de solicitud. Esto significa queSet-Cookie: name=value
desdemydomain.com
no se enviará con solicitudes a subdominios. Juega también con este script de prueba .Aquí hay un ejemplo usando 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:
Parece ser lo mismo que ejecutar:
La clave de cookie está disponible (solo) en el dominio midominio.com .
Ahora, si ejecuta el siguiente JavaScript en mydomain.com:
La clave de cookie está disponible para midominio.com así como para subdominio.midominio.com .
Finalmente, si intentara ejecutar lo siguiente en subdominio.midominio.com:
¿La clave de cookie está disponible para subdominio.midominio.com ? Me sorprendió un poco que esto esté permitido; Asumí que sería una violación de seguridad para un subdominio poder establecer una cookie en un dominio principal.
fuente
httponly
cookies en comparación con el tipo de cookies que está creando.domain
atributo hace que la cookie funcione en subdominios; no existe dicho atributo). Los puntos principales se ignoran en el mejor de los casos y se bloquean activamente en el peor.Tenga en cuenta que puede configurar una cookie de un subdominio en un dominio.
(enviado en la respuesta para solicitar
subdomain.mydomain.com
)Pero NO PUEDE configurar una cookie de un dominio en un subdominio.
(enviado en la respuesta para solicitar
mydomain.com
)POR QUÉ ?
De acuerdo con las especificaciones RFC 6265 sección 5.3.6 Modelo de almacenamiento
y RFC 6265 sección 5.1.3 Coincidencia de dominio
Entonces, "subdominio.midominio.com" coincide con el dominio "midominio.com", pero "midominio.com" NO coincide con el dominio "subdominio.midominio.com"
Comprueba esta respuesta también.
fuente
En ambos casos, sí puede, 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 script de prueba muy útil de CMBuckley demuestra que en (por ejemplo) 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 se comparten. 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 utilizaba diferentes cookies de pila de servicios tanto en la raíz como en el subdominio. Todo funcionó bien hasta que alguien accedió a él en IE y los dos sistemas discutieron sobre la cookie de sesión que ganaría hasta que explotáramos el caché.
fuente
¡Ten cuidado si estás trabajando en localhost! Si almacena su cookie en js así:
Puede que no sea accesible a su subdominio, como
sub.localhost
. Para resolver este problema, debe usar Virtual Host . Por ejemplo, puede configurar su host virtual con elServerName
localhost.com
que podrá almacenar su cookie en su dominio y subdominio de esta manera:fuente
Solución simple
El quinto parámetro de Setcookie determina los (sub) dominios para los que está disponible la cookie. Establecerlo en (EJEMPLO.COM) lo pone a disposición de cualquier subdominio (por ejemplo: SUBDOMAIN.EXAMPLE.COM)
Referencia: http://php.net/manual/en/function.setcookie.php
fuente