2010-05-10 11 views
7

Pregunta rápida: Se puede establecer la ruta donde una cookie es válida, pero ¿también es posible obtener (leer) esta ruta desde la cookie (en PHP)?¿Es posible obtener la ruta de una cookie almacenada?

O bien, ¿es posible ampliar el tiempo de una cookie, sin saber en qué camino está (pero manteniendo el mismo camino)?

+0

Debe corregir la lógica de su aplicación. No es necesario que se encuentre en un estado en el que no sepa qué configuración de cookies utilizó anteriormente. Simplemente almacene el camino que usó en 'setcookie (...)' y luego úselo para reescribir la cookie. – caw

Respuesta

8

Como la mayoría de los navegadores siguen utilizando la especificación de Netscape (ver cached version of http://wp.netscape.com/newsref/std/cookie_spec.html) y no de la especificada en RFC 2109 o RFC 2965, los elementos de la lista en el campo de cabecera Cookie petición consistirán en el nombre y el valor de par:

Al solicitar una URL de un servidor HTTP, el navegador hará coincidir la URL con todas las cookies y, si cualquiera de ellas coincide, se incluirá en la solicitud HTTP una línea que contiene los pares nombre/valor de todas las cookies correspondientes. Este es el formato de esa línea:

Cookie: NAME1=OPAQUE_STRING1; NAME2=OPAQUE_STRING2 ... 

Sólo las especificaciones más recientes (RFC 2109 y RFC 2965) permite que el cliente envíe el camino dentro de la solicitud (extracto de RFC 2109):

la sintaxis de la cabecera es:

cookie   =  "Cookie:" cookie-version 
         1*((";" | ",") cookie-value) 
cookie-value =  NAME "=" VALUE [";" path] [";" domain] 
cookie-version =  "$Version" "=" value 
NAME   =  attr 
VALUE   =  value 
path   =  "$Path" "=" value 
domain   =  "$Domain" "=" value 

[...] el valor para el atributo ruta debe ser el valor del atributo de la vía, en su caso, del encabezado de respuesta Set-Cookie correspondiente. De lo contrario, el atributo debe omitirse del encabezado de solicitud de Cookie. [...]

+0

Ah, sí, y no puedo esperar que todos los usuarios tengan esta especificación más nueva. Entonces tendré que encontrar otro enfoque. – RemiX

+0

@RemiX: No, desafortunadamente la mayoría de los navegadores todavía usan la especificación anterior. – Gumbo

0

PHP no tiene forma de leer la ruta de la cookie porque el navegador solo envía al servidor los valores de las cookies que se deben enviar, nada más.

Puede tratar de volver a configurar la cookie sin dar la ruta, pero dudo mucho de que funcione. Puede haber muchas cookies relevantes diferentes con el mismo nombre y rutas cada vez menos precisas. Si intentó configurar una cookie con el mismo nombre pero sin el navegador de ruta, no sabría cuál de las cookies debería actualizar (tal vez la que tiene la ruta más precisa, pero que podría generar errores de (seguridad) cuando la cookie precisa que espera ser el conjunto no está configurado).

1

sí, puede cambiar/ampliar el tiempo de cookie cuando la cookie se establece como cookie raíz. Es decir, debe configurar la cookie con "/" en el último parámetro. ver el código de abajo ...

setcookie("Message", $msg, time()+60, "/");

si no, básicamente, las cookies se almacenan en la ruta actual (raíz página). puedes intentar acceder a ella

+0

Gracias, pero desafortunadamente también quiero que funcione cuando no es una cookie raíz (si solo usara cookies de raíz ya conocería la 'ruta' y no tendría este problema). – RemiX

3

incluyen la ruta al valor de cookie también

Cuestiones relacionadas