2009-09-13 12 views
10

¿Hay alguna manera de establecer una cookie que sea no legible en los subdominios? En otras palabras, tenga la cookie disponible en domain.com, pero nowww.domain.com o xyz.domain.com.PHP setcookie() para dominios pero NO para los subdominios

//this is what i'm "intending"... 
setcookie($name,$value,$expires,'/','domain.com'); 
//however, this is how it behaves: 
setcookie($name,$value,$expires,'/','.domain.com'); 

El razonamiento: Soy la creación de un CDN estática en un subdominio y no quiero las cookies de sesión de usuario que van y vienen por cada imagen, el archivo css archivo, JS, etc

... ¿Debo recurrir al uso de www.domain.com para mi sitio? ¿Hay alguna solución?

+0

Configurar el dominio a 'nulo' es la única cosa correcta que hacer aquí. De lo contrario, puede encontrar ['$ cookie-> setDomain ($ domain)'] (https://github.com/delight-im/PHP-Cookie/blob/004cde69ec840e65c15275e09b92ecb1da06f357/src/Cookie.php#L117) útil, ya que encontrado en [esta biblioteca independiente] (https://github.com/delight-im/PHP-Cookie). – caw

Respuesta

17

Aparentemente, tener una cookie en "domain.com" que coincidirá con "* .domain.com" es el comportamiento esperado.

Por ejemplo: PERSISTENT CLIENT STATE HTTP COOKIES estado (algunos énfasis es mío):

domain=DOMAIN_NAME

Al buscar en la lista de cookies para galletas válidos, una comparación de los atributos de dominio de la cookie es hecho con el nombre de dominio de Internet de el host desde el que se obtendrá la URL . ...
"Coincidencia de cola" significa ese atributo de dominio se corresponde con contra la cola del nombre de dominio calificado completo del host. Un atributo de dominio de "acme.com" sería con los nombres de host "anvil.acme.com" como y "shipping.crate.acme.com".

Sólo hosts dentro del dominio especificado pueden establecer una cookie para un dominio y dominios deben tener al menos dos (2) o tres (3) períodos de en ellos para evitar dominios de la forma:". com ", " .edu "y" va.us ". Cualquier dominio que falla dentro de uno de los siete dominios especiales de nivel superior que se enumeran a continuación solo requiere dos períodos. Cualquier otro dominio requiere al menos tres. Los siete dominios de nivel superior especiales son: "COM", "EDU", "NET", "ORG", "GOV", "MIL" y "INT".

Por lo tanto, ya sea que usted tiene que:

  • uso "www.domain.com" para su sitio
  • o usa un nombre de dominio totalmente diferente para el contenido estático (como ".anotherdomain.com")
    • por ejemplo, esto es lo que se hace en stackoverflow: el contenido estático se sirve desde sstatic.neta
+0

Buena explicación, +1 aquí también. – Thiyagaraj

+0

Guau, excelente información. No me encontré con eso cuando cavaba. Gracias hombre. Supongo que esto responde mi pregunta ... es www.dominio.com. – brianreavis

+0

De nada :-) Diviértete! (y, si usa www.domain.com para su sitio web y cookies, no se olvide de asegurarse de que "domain.com", cuando se utiliza para acceder a su sitio, lo redirija a "www.domain.com" - no lo haga dependiendo del navegador para hacer eso automáticamente: no siempre funciona, no funciona detrás de un proxy, a veces, por ejemplo (ese es el caso donde yo trabajo, y es un dolor)) –

6

esta es la razón por la cual bastantes sitios (incluido este) registran un dominio dedicado para usar como CDN.

1

No es posible ya que el dominio de las cookies es tail matched contra el nombre de dominio. Tendrá que ir con www.

Cuestiones relacionadas