Tema: FAQ's de PHP
Ver Mensaje Individual
  #207 (permalink)  
Antiguo 10/01/2009, 12:50
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: FAQ's de PHP

Tema: Cookies
Pregunta:
¿Por qué mi cookie creada con PHP funciona en algunas páginas y en otras no?

Respuesta:
Para resolver este pregunta debemos primero conocer cómo funciona la función setcookie(), con la cuál creamos las cookies con PHP.

La función setcookie acepta 6 parámetros (7 desde PHP 5.2). Usualmente las cookies las creamos con los tres primeros:
Código PHP:
setcookie(
    
'nombre_de_la_cookie'// Nombre de la cookie
    
'valor de la cookie'// Valor de la cookie
    
time() + 24 60 60 // Tiempo en segundos
); 
Y generalmente esto funciona bien. Pero muchas veces caemos en que la cookie está disponible en determinadas páginas y en otras no dentro del mismo sitio.

Esto se debe a que las cookies existen para el directorio en el que han sido creadas. Por ejemplo. Tengo un formulario de login y un script PHP que lo procesa. Ambos archivos están en una carpeta login/ dentro del directorio raíz. Aquí ocurre el problema. La cookie será válida para todos los script ubicados en login/ (o sus subdirectorios), mas no para el resto del sitio.

Para solucionar esto, hay que definir el 4to parámetro de la función setcookie(). El valor por defecto es el directorio actual del script que crea la cookie. Al asignarle el valor de '/' haremos que la cookie que se genera esté disponible en el sitio entero, independientemente del directorio donde ha sido creada.

Código PHP:
setcookie(
    
'nombre_de_la_cookie',
    
'valor de la cookie',
    
time() + 24 60 60,
    
'/' // La cookie estará disponible en el sitio entero
); 
Una manera de evitar tener que estar indicando el directorio cada vez que creamos una cookie es crear una función auxiliar que reciba los tres parámetros que siempre usamos, y que haga la llamada a la función "legal" setcookie con el 4to parámetro añadido.