|
PHP: Uso de sesiones en PHP, variables de sesión, cerrar sesión, iniciar sesión
Explicamos paso a paso cómo usar las sesiones en PHP para validación de usuario (inicio de sesión) y para enviar datos entre las páginas del sitio web. Explicamos cómo crear una sesión, cómo crear variables de sesión y cómo cerrar una sesión en PHP.
Inicio de la sesión en PHP con session_startDefinición de la función PHP session_startLa función PHP session_start crea una sesión o reanuda la actual basada en un identificador de sesión pasado mediante una petición GET o POST, o pasado mediante una cookie. Para usar una sesión nominada hay que utilizar la función session_name antes de llamar a session_start. Cuando session.use_trans_sid está habilidado, la función session_start registrará un gestor de salida interno para la reescritura de la URL. Si un usuario utiliza ob_gzhandler o similar con ob_start, el orden de las funciones es importante para la salida adecuada. Por ejemplo, ob_gzhandler se debe registrar antes de iniciar una sesión.
Cómo usar session_start en nuestro sitio webEn todas las páginas de nuestro sitio web donde necesitemos usar algún dato del usuario que ha iniciado sesión o mostrar alguna opción especial para el usuario deberemos añadir el siguiente código, siempre al principio del fichero (antes de cualquier etiqueta HTML de la página): <? Con el procedimiento "session_start()" iniciaremos la sesión, si ya está iniciada no hará nada.
Registrar una variable de sesión, establecer un valor para una variable de sesión en PHPPara registrar una variable de sesión en versiones anteriores de PHP, se usaba la función session_register, aunque esta función no es aconsejada pues está obsoleta, a partir de PHP 5.3.0. Para registrar una variable de sesión y establecer un valor usaremos $_SESSION["nombre_varaable"]. En el siguiente ejemplo, registramos y establecemos el valor para las variables de sesión nombre_cliente y nombre_usuario: $sql = "SELECT u.usuario, u.contrasena, u.idcliente, c.nombre cliente " . " FROM usuario u, cliente c ". " WHERE c.id=u.idcliente and usuario='" . $txtusuario . "'"; $sqlResultado = mysql_query($sql); $row = mysql_fetch_array($sqlResultado); $contrasena = $row["contrasena"]; $idcliente = $row["idcliente"]; if ($contrasena == md5($txtcontrasena)) { //establecermos las variables de sesión $_SESSION["nombre_usuario"] = $row["usuario"]; $_SESSION["nombre_cliente"] = $row["cliente"]; ... El ejemplo anterior nos sirve también como método para realizar el inicio de sesión (validación) de un usuario en nuestro sitio web, mostramos la consulta SQL que se ejecutará y la comprobación de si el usuario existe y si la contraseña introducida en el formulario (txtcontrasena) coincide con la guardada en la base de datos (contrasena una vez obtenido su hash md5). Nota: cuando el usuario se da de alta en nuestro sitio web, guardamos el hash (md5) de la contraseña en la base de datos, usando la función de PHP: md5. Por ello, en el ejemplo anterior, cuando mostramos al usuario el formulario para iniciar sesión y éste introduce su nick y su contraseña, para comparar su contraseña con la de la base de datos, utilizamos nuevamente la función de PHP md5, para comparar el hash md5 de la contraseña introducida por el usuario con el guardado en la base de datos. Este método es el idóneo, así, ante cualquier acceso indebido a la tabla de usuarios de nuestra base de datos, sólo se mostrará en el campo "contrasena" el valor del hash md5, nunca la contraseña del usuario y puesto que el hash md5 es unidireccional, de él no se puede obtener la contraseña (en teoría).
Añadir un enlace para que el usuario pueda cerrar la sesión en cualquier momentoCuando el usuario ha iniciado sesión, siempre es recomendable añadir un enlace para que éste pueda cerrar la sesión en cualquier momento de forma segura. Así evitaremos accesos indebidos por otros usuarios que usen el mismo equipo que el que inició sesión. En teoría, siempre que se cierre el navegador web se cerrará la sesión automáticamente, pero es aconsejable añadir este enlace para que el usuario decida cuándo cerrar la sesión. Para añadir el enlace de "Cerrar sesión", podemos insertar el siguiente código PHP donde queramos que aparezca el enlace: if (! empty($_SESSION["nombre_usuario"])) { echo "<a href="cerrarsesion.php" title="Cerrar sesión">Bienvenid@</a>" . Explicamos el código anterior:
Como ya hemos comentado, este código PHP lo pondremos en todas las páginas de nuestro sitio web donde queramos que aparezca el enlace a cerrar sesión. Lo colocaremos, dentro de cada página, en el sitio donde queramos que aparezca. Puesto que PHP permite "mezclarse" con código HTML no tendremos problema, por ejemplo: <td style="background-image:url(img/ajpdsoft.png)"> <? if (! empty($_SESSION["nombre_usuario"])) { echo "<a href="cerrarsesion.php" title="Cerrar sesión">Bienvenid@</a>" . Fichero "cerrarsesion.php" para cerrar sesión en PHP con session_destroyDefinición de la función session_destroy de PHPdestruye toda la información asociada con la sesión actual. No destruye ninguna de las variables globales asociadas con la sesión, ni destruye la cookie de sesión. Para volver a utilizar las variables de sesión se debe llamar a session_start(). Para destruir la sesión completamente, como desconectar al usuario, el id de sesión también debe ser destruido. Si se usa una cookie para propagar el id de sesión (comportamiento por defecto), entonces la cookie de sesión se debe borrar. setcookie() se puede usar para eso. Uso de la función session_destroy para cerrar la sesión en PHPCrearemos un fichero de texto plano sin formato con el siguiente contenido, guardándolo con el nombre "cerrarsesion.php" y lo subiremos a nuestro sitio FTP: <? session_start(); unset($_SESSION["nombre_usuario"]); unset($_SESSION["nombre_cliente"]); session_destroy(); header("Location: index.php"); exit; ?> A continuación explicamos cada línea del fichero:
Nota 1: si tenemos muchas variables de sesión y queremos liberarlas todas podemos usar este código PHP: $_SESSION = array(); Nota 2: si queremos eliminar todos los datos de las cookies guardadas podemos ejecutar este código PHP: if (ini_get("session.use_cookies")) { $params = session_get_cookie_params(); setcookie(session_name(), '', time() - 42000, $params["path"], $params["domain"], $params["secure"], $params["httponly"]); } Aviso importante sobre las sesiones en PHP aquí descritasConviene dejar claro que el método de sesiones explicado en este artículo no es el más profesional y seguro. Existen muchas más funciones para el tratamiento de las sesiones en PHP como son:
Bien usadas todas estas funciones (o las necesarias) podrán dotar a nuestro sitio web de mayor robustez y seguridad. Por supuesto, lo explicado aquí no es lo más seguro pero sí, tal vez, lo más sencillo de implementar. Por ejemplo, podríamos usar la función session_id para obtener el ID de sesión del usuario actual y guardarlo en una tabla de una base de datos, de esta forma podríamos saber cuántos usuarios han iniciado sesión en nuestro sitio web, qué usuarios y en qué día y hora: $session_id = session_id(); $sql = "INSERT INTO sesiones (user_id, session_id) VALUES ('" .
Artículos relacionados
CréditosArtículo realizado íntegramente por Alonsojpd miembro fundador del proyecto AjpdSoft. Anuncios
Enviado el Martes, 14 septiembre a las 01:54:58 por ajpdsoft
|
|