Debido a los problemas extraños de cookies de dominio / subdominio que estoy recibiendo, me gustaría saber cómo los navegadores manejan las cookies. Si lo hacen de diferentes maneras, también sería bueno saber las diferencias.
En otras palabras, cuando un navegador recibe una cookie, esa cookie PUEDE tener un dominio y una ruta adjunta. O no, en cuyo caso el navegador probablemente los sustituya por defecto. Pregunta 1: ¿qué son?
Más tarde, cuando el navegador está a punto de realizar una solicitud, comprueba sus cookies y filtra las que debe enviar para esa solicitud. Lo hace al compararlos con la ruta y el dominio de las solicitudes. Pregunta 2: ¿cuáles son las reglas de coincidencia?
Adicional:
La razón por la que pregunto esto es porque estoy interesado en algunos casos extremos. Me gusta:
- ¿Estará disponible una cookie
.example.com
parawww.example.com
? - ¿Estará disponible una cookie
.example.com
paraexample.com
? - ¿Estará disponible una cookie
example.com
parawww.example.com
? - ¿Estará disponible una cookie
example.com
paraanotherexample.com
? - ¿
www.example.com
Podrá configurar cookies paraexample.com
? - ¿
www.example.com
Podrá configurar cookies parawww2.example.com
? - ¿
www.example.com
Podrá configurar cookies para.com
? - Etc.
Agregado 2:
Además, ¿podría alguien sugerirme cómo debo configurar una cookie para que:
- Se puede establecer con cualquiera
www.example.com
oexample.com
; - Es accesible por ambos
www.example.com
yexample.com
.
Las respuestas anteriores están un poco desactualizadas.
RFC 6265 fue publicado en 2011, basado en el consenso del navegador en ese momento. Desde entonces, ha habido algunas complicaciones con los dominios de sufijos públicos. He escrito un artículo que explica la situación actual: http://bayou.io/draft/cookie.domain.html
Para resumir, las reglas a seguir con respecto al dominio de cookies:
El dominio de origen de una cookie es el dominio de la solicitud de origen.
Si el dominio de origen es una IP, no se debe establecer el atributo de dominio de la cookie.
Si no se establece el atributo de dominio de una cookie, la cookie solo es aplicable a su dominio de origen.
Si se establece el atributo de dominio de una cookie,
Se puede deducir que una cookie siempre es aplicable a su dominio de origen.
El dominio de cookies no debe tener un punto inicial, como en
.foo.com
- simplemente usefoo.com
Como ejemplo,
x.y.z.com
puede establecer un dominio de cookie para sí mismo o los padres -x.y.z.com
,y.z.com
,z.com
. Pero nocom
, que es un sufijo público.y.z.com
es aplicable ay.z.com
,x.y.z.com
,a.x.y.z.com
etc.Los ejemplos de sufijos públicos -
com
,edu
,uk
,co.uk
,blogspot.com
,compute.amazonaws.com
fuente
x.y.z.com
pueda configurar una cookiez.com
?Para una amplia cobertura, revise el contenido de RFC2965 . Por supuesto, eso no significa necesariamente que todos los navegadores se comporten exactamente de la misma manera.
Sin embargo, en general, la regla para la ruta predeterminada si no se especifica ninguna en la cookie es la ruta en la URL desde la que llegó el encabezado Set-Cookie. Del mismo modo, el valor predeterminado para el Dominio es el nombre de host completo en la URL desde la que llegó la cookie configurada.
Las reglas de coincidencia para el dominio requieren que el dominio de la cookie coincida con el host al que se realiza la solicitud. La cookie puede especificar una coincidencia de dominio más amplia mediante include *. en el atributo de dominio de Set-Cookie (esta área que los navegadores pueden variar). Hacer coincidir la ruta (suponiendo que el dominio coincida) es una cuestión simple de que la ruta solicitada debe estar dentro de la ruta especificada en la cookie. Por lo general, las cookies de sesión se configuran con path = / o path = / applicationName / para que la cookie esté disponible para todas las solicitudes en la aplicación.
Respuesta a Agregado:
*
No puedo probar esto en este momento, pero tengo una idea de que al menos IE7 / 6 trataría la rutaexample.com
como si lo fuera.example.com
.fuente
El último (tercero para ser exactamente) RFC para este problema es RFC-6265 (Obsoletes RFC-2965 que a su vez obsoletos RFC-2109).
Según esto, si el servidor omite el atributo de Dominio, el agente de usuario devolverá la cookie solo al servidor de origen (el servidor en el que reside un recurso determinado). Pero también advierte que algunos agentes de usuario existentes tratan un atributo de dominio ausente como si el atributo de dominio estuviera presente y contuviera el nombre de host actual (por ejemplo, si example.com devuelve un encabezado Set-Cookie sin un atributo de dominio, estos agentes de usuario lo harán también envía la cookie por error a www.example.com).
Cuando se haya especificado el atributo Dominio, se tratará como un nombre de dominio completo (si hay un punto inicial en el atributo, se ignorará). El servidor debe coincidir con el dominio especificado en el atributo (tener exactamente el mismo nombre de dominio o ser un subdominio del mismo) para obtener esta cookie. Más exactamente se especifica aquí .
Así por ejemplo:
Domain=.example.com
es equivalente aDomain=example.com
Domain=www.example.com
cerrará el camino para www4.example.comPD: la coma final en el atributo de dominio hará que el agente de usuario ignore el atributo = (
fuente
Probé todos los casos en el último Chrome, Firefox, Safari en 2019.
Respuesta a Agregado:
fuente
Se sabe que los RFC no reflejan la realidad.
Mejor revise draft-ietf-httpstate-cookie , trabajo en progreso.
fuente
Hay reglas que determinan si un navegador aceptará el encabezado de respuesta Set-header (escritura de cookies del lado del servidor), unas reglas / interpretaciones ligeramente diferentes para el conjunto de cookies usando Javascript (no he probado VBScript).
Luego, hay reglas que determinan si el navegador enviará una cookie junto con la solicitud de la página.
Existen diferencias entre los motores principales del navegador en cómo se manejan las coincidencias de dominio y cómo se interpretan los parámetros en los valores de ruta. Puede encontrar evidencia empírica en el artículo Cómo los diferentes navegadores manejan las cookies de manera diferente
fuente
Me sorprendió leer la sección 3.3.2 sobre rechazar cookies:
http://tools.ietf.org/html/rfc2965
Eso dice que un navegador debe rechazar una cookie de xyzcom con el dominio .z.com, porque 'xy' contiene un punto. Entonces, a menos que esté malinterpretando el RFC y / o las preguntas anteriores, podría haber preguntas agregadas:
¿Habrá una cookie para .example.com disponible para www.yyy.example.com? No.
¿Una cookie establecida por el servidor de origen www.yyy.example.com, con el dominio .example.com, tendrá su valor enviado por el agente de usuario a xxx.example.com? No.
fuente
z.com
que debe aplicarse az.com
y todos los subdominios.No, pero
example.com.fr
puede establecer una cookie paraexample2.com.fr
. Firefox protege contra esto manteniendo una lista de TLD: http://securitylabs.websense.com/content/Blogs/3108.aspxAparentemente, Internet Explorer no permite que los dominios de dos letras establezcan cookies, lo que supongo explica por qué
o2.ie
simplemente redirige ao2online.ie
. A menudo me preguntaba eso.fuente