| Despabilando la MonoNeurona::Internet es de todos [Inicio] [Regresar] |
|
WWW \ Manejo de Sesiones en PHP Este artículo ha sido consultado en 2,886 ocasiones. Las sesiones nos permiten almacenar y consultar información sobre un visitante sin necesidad de estar enviándola a través de formularios. Usted podría decir "eso ya lo hago con las cookies", pero el uso de las cookies es
cada vez más limitado. Muchos navegadores las deshabilitan por omisión pues guardan información en la computadora del usuario y esto las hace inseguras (existen varios programas hackeriles para extraer contraseñas guardadas en las cookies). PHP posee un repertorio interesante de funcionalidades que nos permiten hacer todo lo que hacemos con las cookies sin guardar nada en la computadora del visitante. Las sesiones de PHP se guardan en un directorio asignado del servidor donde Apache se ejecuta. Generalmente este directorio es /tmp pero es posible modificarlo desde el archivo /etc/php4/apache/php.ini. Estos archivos están vinculados al usuario que navega a través de un identificador especial llamado "Session ID". La mayoría de las veces el usuario no se entera de que está en una sesión al navegar por un sitio en la red. Las sesiones pueden usarse para muchas cosas pero la gran mayoría de las veces se usan para
establecer los derechos de un usuario en el sitio luego de logearse con un nombre de usuario y una contraseña. ¡Basta de teoría! Para empezar a trabajar una sesión en PHP lo primero es iniciarla con la función
session_start() , esta función debe estar
ANTES de cualquier otra cosa. Esto es muy importante, de no colocarla
antes obtendrás mensajes como: Warning: Cannot send session cookie - headers already sent by (output started at session_header_error/session_error.php:2) in session_header_error/session_error.php on line 3 Warning: Cannot send session cache limiter - headers already sent (output started at session_header_error/session_error.php:2) in session_header_error/session_error.php on line 3 Este error es producido por el siguiente código:
El error ocurre porque la línea "Pablito..." se envia antes de la función session_start(). La manera correcta de hacerlo sería así:
La diferencia entre mandarla antes o después radica en que cualquier petición http es tomada y negociada de inmediato por el Webserver. Al colocar el inicio de sesión después de que algo le ha llegado a Apache hace imposible iniciarla pues ya ha habido un intercambio de información. Incluso una línea vacía después de A través de su historia, Microsoft ha producido buenos programas para el mundo, ¡Internet Explorer no es uno de ellos! Uno de sus muchos errores radica en que al llenar un formulario y dar el botón Back, los datos del formario se pierden. Imagínese llenar un largo formulario fiscal y luego de un error al enviarlo, dar Back y ver que toda la información se perdió! Para solucionar este inconveniente es necesario agregar la siguiente línea DESPUÉS de iniciada la sesión:
Bien, veamos un ejemplo de como decirle a PHP que inicie una sesión si el login y el password de un usuario coinciden. Primero crearemos la página acceso.html:
Como puedes ver, no hay nada esotérico en este archivo HTML, solamente lo usaremos para enviar dos valores a la página valida.php. La cual luce así:
Bien, este script inicia la sesión (las primeras dos líneas), toma las variables que enviamos del formulario:
Si la doble condición no se cumple (else), la
variable $msg toma un valor diferente:
Destruyendo una sesión Esta página simplemente imprime el valor de la variable de sesión Esta variable estará siempre a disposición del Webmaster sin necesidad de estar colocándola oculta en un formulario o enviándola en el URL de cada página. Con las sesiones, es muy sencillo comprobar si alguien puede ver una página con acceso restringido en el Website:
¡Session rulezzz! Además de mostrar el valor de la sesión, veremos una liga
a la página salir.php que es la página que nos "saca" del sitio (logout):
Esta página borra las variables de sesión con la función session_unset(), destruye la sesión con session_destroy() y envia al usuario a la página de inicio con la función header(), es decir a acceso.html, "sacando" al usuario del sitio. Y voila!! hemos aprendido a manejar sesiones en PHP. En un próximo tutorial veremos como guardar y eliminar una sesión en una base datos (PostgreSQL o MySQL) y no en el directorio /tmp ¿Para que sirve esto?: Para manejar sesiones distribuidas entre varios servidores. La coloración del código es fácil con: Última actualización: 2007-04-29 10:57:00-05 |
| Este trabajo está licenciado bajo la MonoNeurona Commons License. 2002-2008 © :: Colectivo MonoNeurona.org :: |