2009-12-28 15 views

Respuesta

9

En caso de que intente acceder a las cookies configuradas para una ruta diferente en el mismo dominio que la actual, eso no se puede hacer. El navegador en sí restringe esto, y solo envía las cookies apropiadas para la ruta actual.

+0

¿qué pasa con facebook ?, Facebook escribe cookies para el dominio "facebook.com", pero usa estas cookies de "www.facebook.com" – user962284

+0

@ user962284 ¿estás seguro? Estoy bastante seguro de que FB establece todas las cookies en www.facebook.com, ya que ni siquiera es posible acceder a facebook.com (lo redireccionan a www.) –

+0

Esto es incorrecto. Un navegador que sigue las recomendaciones del RFC * does * envía ambos valores de vuelta en el caso de más de una cookie con el mismo nombre pero diferentes rutas. De hecho, es PHP lo que se interpone; por favor mira mi respuesta publicada. –

2

sí, es el cuarto argumento, pero sólo podrán acceder a la cookie si se ha establecido el uso de un camino que el directorio actual reside en

que es confuso ... aquí es a partir de PHP:

La ruta en el servidor en el que estará disponible la cookie . Si se establece en '/', la cookie estará disponible dentro de todo el dominio. Si se establece en '/ foo /', la cookie solo será disponible en el directorio/foo/ y en todos los subdirectorios, como /foo/bar/de dominio. El valor por defecto es el directorio actual que la cookie se establece en.

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

Se accede a ella como cualquier otra galleta. Estará disponible en $ _COOKIE si el script tiene acceso a él.

+0

Me refiero a cómo leerlo, cómo acceder a los valores de las cookies en diferentes rutas pero en el mismo nombre de dominio. – Steven

+0

¿Cómo diferenciarlos? – Steven

+0

php no hace eso por usted. tendrías que implementar eso tú mismo. – Galen

2

No, tales parámetros son imposibles porque el navegador no envía la ruta al servidor. Solo envía el nombre y el valor de cada cookie (para que no pueda ver la ruta, si es una cookie de sesión, cuándo caducará, etc.).

2

No creo que sea posible obtener la cookie de una ruta diferente, ya que podría causar un problema de seguridad.

4

Mientras que el cliente HTTP (es decir, el navegador) no devuelve la ruta en la que se estableció la cookie, PHP realmente hace suposiciones sobre las cookies con respecto a su matriz $ _COOKIE.

Si establece dos galletas con el mismo nombre, una con el valor de "primer valor" con la ruta / y el segundo con el valor de "segundo valor" con la ruta /prueba, un navegador después de la recomendado, pero no obligatorio, el comportamiento del RFC le enviará los dos valores. Al acceder a un URL en la ruta de /prueba, el navegador envía esto:

Cookie: name=second-value, name=first-value 

El "problema" es que PHP sólo lee el primer valor - $ _COOKIE [ 'nombre'] sólo contendrá el valor "segundo valor" sin indicación de que existe el "primer valor". Si necesita acceder a ambos valores, necesita analizar el valor de $ _SERVER ['HTTP_COOKIE'] usted mismo - esto contendrá "nombre = segundo valor, nombre = primer valor" para el ejemplo anterior. Tenga en cuenta que "segundo valor" es el primero en la línea porque se estableció con una ruta más larga. Tenga en cuenta que el RFC no garantiza este comportamiento, solo dice que los clientes HTTP DEBERÍAN hacer.

+0

Interesante, ¿esto es específico para los subdirectorios? Como en, una solicitud a un subdirectorio recibirá las cookies de la raíz, pero una solicitud a la raíz no recibirá cookies para los subdirectorios? También tengo curiosidad por saber si los navegadores realmente implementan esto o no :) –

+0

Corregir, un subdirectorio o una ruta más larga siempre recibirá una cookie con una ruta más corta que coincida. Todos los navegadores se implementan de esta manera. Lo único que no garantiza el comportamiento es que si tiene varias cookies con el mismo nombre pero diferentes rutas, * debe * recibir ambas cookies en un orden fijo, pero el RFC no hace ninguna promesa. –

+0

Esta es en realidad la respuesta correcta ya que brinda una explicación completa de por qué sucede esto. Debo señalar, y esto falta, aunque no puedes decirle '$ _COOKIE []' una ruta, puedes decirle a 'setcookie' una ruta. Estamos enfrentando esto con una API. Así que puedes decirle a 'setcookie' que establezca la ruta raíz y luego acceder a ella en cualquier lugar, así:' setcookie ('name', 'data', expire, '/') '. Ese último parámetro es la ruta y establecerlo en '/' hace que sea la ruta raíz. Esto resolvería el problema del OP. – jfreak53

Cuestiones relacionadas