“Aplicaciones Web dinámicas con PHP y MySql”
Introducción al manejo de Sesiones con PHP
Sergio Gabriel Rodríguez http://www.3trex.com.ar
Sesiones en PHP •
Las variables sólo existen en el archivo en que son ejecutadas .
•
Si cargamos otra página distinta, los valores de estas variables se pierden.
•
Podemos pasarlos por la URL o inscribirlos en un formulario para su posterior uso.
•
Estos métodos, no son todo lo prácticos que podrían en determinados casos en los que la variable que queremos conservar ha de ser utilizada en varias páginas diferentes y distantes unas de otras.
•
Podríamos pensar que ese problema puede quedar resuelto con las cookies pero no sería 100% infalible.
Sesiones en PHP • Básicamente una sesión es la secuencia de páginas que un usuario visita en un sitio Web. Desde que entra en nuestro sitio, hasta que lo abandona. • El término sesión en PHP, se aplica a esta secuencia de navegación, para ello se crea un identificador único que se asigna a cada una de estas sesiones de navegación. • PHP proporciona una forma de conservar ciertos datos (variables) a lo largo de los subsiguientes accesos, lo cual le permite construir aplicaciones más personalizadas. • Una sesión en el entorno del desarrollo Web consiste en controlar el acceso individual a una página o grupo de páginas determinado, mediante la asignación de un identificador único para cada usuario.
Sesiones en PHP • A cada visitante que accede se le asigna un identificador único, llamado "session id" (identificador de sesión). • El soporte de las sesiones le permite registrar un número arbitrario de variables que se conservarán en las siguientes peticiones. • Cuando un visitante acceda a su Web, PHP comprobará automáticamente si se le ha enviado un "session id" específico con su petición, en cuyo caso se recrean las variables que se habían guardado anteriormente. • El proceso en cualquier lenguaje de programación podría ser algo así:
Si Existe una sesión la retomamos Si no existe creamos una nueva Generamos un identificador único
Inicializar una Sesión • Para utilizar sesiones en PHP lo primero es inicializarlas. Podemos hacerlo explícitamente, mediante la función session_start()
• Esta es la forma más básica, PHP habrá insertado de forma automática la sesión y ésta será pasada de una página a otra sin hacer nada más. Podemos obtener el identificador de la sesión en cualquier momento mediante la función session_id().
Variables de Sesión • Una variable de sesión es una variable, como cualquiera de las que gestiona PHP, pero que reside en un espacio específico en el servidor, junto con el identificador de sesión, y que pertenece únicamente a un usuario.
• Para registrar una variable de sesión utilizamos la variable global $_SESSION. Los usuarios pueden acceder a una variable de la sesión como si se tratase de una variable normal.
funciones de Sesión session_start(): crea una nueva sesión para un nuevo visitante o bien recupera la que está siendo llevada a cabo. session_id() : devuelve el identificador de la sesión actual. $_SESSION[‘variable’]: array global que contiene todas las variables de sesión creadas. session_destroy(): Destruye todos los datos guardados en una sesión.
ej.: Control de acceso a usuarios • Es muy común que necesitemos, en determinados módulos o secciones de nuestra Web, restringir el acceso sólo a usuarios autorizados a las mismas. Por Ej.: Backends • Para esto, es muy común y recomendado el uso de sesiones. • Supongamos un script de login de usuarios llamado “login.php” que contiene un formulario de ingreso de usuarios, donde introducirá su nombre de usuario y su password.
ej.: Control de acceso a usuarios • El script “control_login.php” recibirá los datos enviados por $_POST y deberá verificar en la base de datos si estos son correctos, en caso de que no lo sean, redireccionamos nuevamente a “login.php” para un nuevo intento. if($_POST[‘usuario’] && $_POST[‘contrasena’]){ $sql = mysql_query(“SELECT id, usuario, pass FROM usuarios WHERE usuario= $_POST[‘usuario’] AND pass=$_POST[‘contrasena’]”); if(mysql_num_rows($sql) < 1){ echo “Error, usuario o contraseña incorrectas”; echo “
Volver”; }else { //creamos la sesión y redireccionamos a menú ………………. } }
ej.: Control de acceso a usuarios • Si los datos enviados son correctos, es decir la consulta encontró el registro en nuestra tabla, debemos crear las variables de sesión que vayamos a utilizar, durante la sesión del usuario. Ej: id y usuario.
if(mysql_num_rows($sql) < 1){ echo “Error, usuario o contraseña incorrectas”; echo “
Volver”; }else { //creamos la sesión y redireccionamos a menu session_start(); // inicializamos la sesión $Usuario = mysql_fetch_row($sql); $_SESSION[‘id_usuario’] = $Usuario[0]; $_SESSION[‘usuario’] = $Usuario[1]; echo ‘<script language="javascript">location.href="Menu.php"’; }
ej.: Control de acceso a usuarios • En cada página de los módulos del backend debemos, al comenzar cada script, inicializar la sesión de manera que retome las variables de sesión creadas y verificar que exista nuestra variable de sesión de control de acceso. session_start(); if($_SESSION[‘id_usuario’] && $_SESSION[‘usuario’]){ // muestro el contenido del módulo restringido }else { //deniego el acceso echo ‘No tiene permiso para ingresar, por favor registrese’; echo ‘
Registrarse”; }
ej.: Control de acceso a usuarios • El usuario debe tener la posibilidad de cerrar su sesión, de manera que otro usuario no permitido no pueda tener acceso, para esto debemos destruir la sesión activa. Una manera de hacerlo es que una de las opciones del backend muestre un enlace o botón de “Cerrar sesión” o simplemente “Salir”, enviando una variable por $_GET o $_POST que nos indique que debemos eliminar la sesión. session_start(); if($_GET[‘salir’] = = 1){ $_SESSION[‘id_usuario’] = ‘’; $_SESSION[‘usuario’] = ‘ ‘; session_destroy(); echo ‘Su sesión a finalizado’; echo ‘
Salir”; }
Ejercicio: • Crear la tabla ‘usuario’, con los campos: id, nombre, usuario, password. • Restringir el acceso a cada uno de los scripts del Backend solo a usuarios autorizados. • En cada página mostrar la leyenda “Bienvenido nombreUsuario”, utilizando una variable de sesión. • Crear la opción “Cerrar sesión” o “Salir” que permita desloguearnos del sistema.