Propagar el identificador de sesión de PHP por cookies o URL

  • Por
  • 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.

Autor

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir

Comentarios

striker

17/4/2007
????
No entiendo el uso de este artículo:
Toda la vida he utilizado sessions y nunca he necesitado ni guardar su id en cookies ni pasarlos por get (faltaría mas, ¿qué gracia tendria entonces?).
¿Alguien me puede "abrir los ojos"?

walter

18/4/2007
mmm opino igual que el mensaje anterior, por que yo pense con sesiones se guardaban en cookies pero en el servidor, creo que el artculo hace confundir mas a las personas.

duwis

19/4/2007
De hecho, al usar session se guarda un archivo cookie en el cliente con el id de la sesion. Esta es definitivamente la opcion predeterminada y la que me parece mas conveniente... como dice el autor el navegador cliente puede no tener activada la opcion de aceptar cookies de nuestro sitio (o de nadie), en cuyo caso le mostrariamos un mensaje para q lo active... Tambien se puede usar el pasarla por url pero al ser menos segura habria que tener en cuenta que funcionalidad queremos implementar en nuestro sitio.

walter

19/4/2007
bueno, espero no parecer obstinado, hasta donde yo se hay 2 formas de como se manejan las cookies una por session y se guarda en el servidor web en la carpeta tmp, y el otro en el explorador mismo y otra manera de trabajar sessiones es por la URL claro. si estoy mal espero me corrigan y me expliquen bien.

TUHSMuertos

13/5/2015
Gran aporte
Eres un mierdas inventate un codigo, y encima incluyes un puto captcha para insultarte

Robert Moreira

23/9/2016
Explicación de sesiones con url en PHP
Saludos, este fue uno de los foros en los que busque información y apoyó a mi investigación, desarrolle unas diapositivas que seguro les servirán y pueden descargar, en el TEMA 12 tiene ejemplo en código de la administración de sesión basada en URL http://www.slideshare.net/leowicho/sesiones-y-cookies-en-php