> Manuales > Taller de PHP

El identificador de la sesión abierta se puede propagar en una cookie o como parámetro en la URL. Vemos las diferencias y como configurar PHP para cada caso.

Para guardar en la sesión informaciones independientes para cada usuario, PHP debe identificar la sesión de cada cliente que se conecta a la página. Al entrar un nuevo usuario en la página, PHP genera un identificador de sesión que es único y que será siempre el mismo durante toda su visita a la página. Las variables de sesión las almacena PHP internamente, asociadas al identificador de la sesión y debe asegurarse que cada cliente pueda memorizar el identificador de sesión durante toda su visita.

PHP dispone de un par de métodos para poder propagar el identificador de sesión en cada página que visita el cliente: en una cookie, o bien la propaga a través de la URL.

En una cookie
Es el método más cómodo y viene configurado por defecto. Nosotros no tenemos que hacer nada. PHP se encarga de guardar la información de la sesión por nosotros en una cookie en el navegador del usuario. El problema de este método es que no podemos estar seguros que todos los usuarios acepten cookies de sesión en sus navegadores.

En una variable pasada por parámetro en la URL
Consiste en enviar el identificador en todas las URL como parámetro, para recoger por método GET. Es un poco más engorroso porque en cada URL aparecerá el parámetro, algo como esto: pagina.php?PHPSESSID=8af7f938a4ab81aa6406e3d57ea41081 Este método tiene también sus ventajas e inconvenientes. Por un lado es más fiable que las cookies, porque pasar el identificador por la URL es posible siempre, independientemente del navegador cliente o su configuración. Pero por otro lado, enviar el PHPSESSID por la URL puede traer problemas, porque puede hacer público su identificador de sesión a otras personas o programas o porque pueda almacenarse en favoritos o historial urls con identificadores de sesión antiguos.

Pasar el identificador por una cookie

En la mayoría de los casos PHP intentará guardar el identificador de sesión en una cookie, aunque php.ini tiene algunas configuraciones para alterar este comportamiento por defecto.

session.use_cookies nos sirve para indicar si queremos que se envíe la cookie con el identificador de sesión. Por defecto está activado con el valor 1.

Nota: acuérdate de reiniciar Apache cuando hagas cambios en php.ini para que se hagan efectivos.

Pasar el identificador de sesión como parámetro en la URL

Podemos hacer una prueba para ver qué pasa con las variables de sesión cuando no se dispone de cookies. Veremos que no se memorizan las variables de sesión en las sucesivas páginas. Esto se puede solucionar pasando el identificador de sesión por la URL. En PHP sería algo como esto:

<a href="leer_sesion.php?<?=SID?>">Paso variable de sesión por URL</a>

Es un fastidio tener que escribir ese dato en cada URL, pero PHP también dispone de mecanismos para que las URL se escriban automáticamente con los identificadores de sesión, de manera transparente para el desarrollador. Esto se puede indicar desde el archivo php.ini en la varible de configuración session.use_trans_sid.

Nota: según el sitio de PHP la alteración de las URLs automática para propagar el identificador de sesión sólo se puede hacer si se ha compilado PHP con la opción --enable-trans-sid. En mi configuración de PHP sobre Windows a mi si que me permite usar session.use_trans_sid y se propagan los identificadores de sesión sin que tenga que hacer nada.

Miguel Angel Alvarez

Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...

Manual