Diferencia entre revisiones de «Usuario:ManuelRomero/ProgramacionWeb/ProgramacionWeb/Sesiones»
| Línea 1: | Línea 1: | ||
{{:Usuario:ManuelRomero/ProgramacionWeb/Authentificacion/nav}} | {{:Usuario:ManuelRomero/ProgramacionWeb/Authentificacion/nav}} | ||
| − | + | <div id=parrafo> | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | < | + | |
| − | + | ||
| − | + | ||
| − | + | ||
{{PHP/Inaem/Sesiones}} | {{PHP/Inaem/Sesiones}} | ||
| − | + | </div> | |
Última revisión de 18:32 4 mar 2026
Las sesiones
Tip: Por cliente entendemos normalmente un navegador (o agente HTTP) que interactúa con el servidor.
|
Ideas generales de las sesiones
- A diferencia de las cookies, las variables de sesión se almacenan en el servidor.
- Las sesiones tienen un tiempo limitado de existencia.
- Para identificar al usuario que generó las variables de sesión, el servidor crea una clave única llamada SID (Session ID).
- Esta clave se envía al navegador y normalmente se almacena en una cookie.
- Cada vez que el navegador solicita una nueva página al mismo sitio, envía esta cookie con el SID.
- Con ese SID el servidor identifica al cliente y recupera las variables de sesión almacenadas.
- Normalmente los datos de sesión se guardan en archivos en el servidor, aunque PHP permite utilizar otros sistemas de almacenamiento (memoria, bases de datos, etc.).
- Si una sesión permanece inactiva durante un tiempo determinado, PHP elimina automáticamente sus datos.
Por defecto este tiempo suele ser de 1440 segundos (24 minutos), aunque puede configurarse.
- Las variables de sesión son más seguras que las cookies, ya que su contenido se almacena en el servidor y no es visible directamente para el cliente.
- El navegador únicamente envía el SID en cada petición, no el contenido completo de las variables.
- Desventaja: las sesiones ocupan espacio en el servidor, lo que puede ser un problema si existen muchas sesiones activas.
- Si el navegador tiene las cookies desactivadas, las sesiones normalmente no funcionarán correctamente.
SID de la sesión
Estas ideas son transparentes para el programador, no las tenemos que controlar directamente, pero conviene conocer cómo funcionan.
- Existen dos formas de mantener el SID de la sesión:
- Utilizando cookies (forma más habitual).
- Propagando el SID como parámetro en la URL.
Ejemplo:
http://www.misitioweb.com/tienda/listado.php?PHPSESSID=34534fg4ffg34ty
- En el ejemplo anterior, el SID es el valor del parámetro PHPSESSID.
En PHP todas estas acciones se realizan de forma transparente para el programador. Como desarrolladores podemos utilizar directamente las sesiones mediante supervariables y funciones.
Cómo funciona una sesión
De forma simplificada el proceso es el siguiente:
- El cliente solicita una página al servidor.
- El servidor crea una sesión y genera un SID.
- El SID se envía al navegador (normalmente mediante una cookie).
- En cada petición posterior el navegador envía ese SID al servidor.
- El servidor utiliza el SID para recuperar los datos de la sesión.
Configuración
Existen una serie de directivas para configurar las sesiones que conviene conocer.
- Las directivas de configuración de sesiones pueden consultarse con la función `phpinfo()` y modificarse en el archivo de configuración de PHP php.ini.
- Para ver todas las directivas:
http://es.php.net/manual/es/session.configuration.php
Algunas directivas importantes son:
- session.use_cookies
- Indica si se deben usar cookies (1) para almacenar el SID.
- session.use_only_cookies
- Si se activa (1), se desactiva la propagación del SID en la URL.
- Esto mejora la seguridad evitando ataques como el session hijacking.
- session.save_handler
- Indica cómo se almacenan los datos de sesión.
- El valor por defecto es files (archivos en el servidor).
- session.name
- Nombre de la cookie que almacena el SID.
- Por defecto es PHPSESSID.
- session.auto_start
- Si está activado (1), PHP inicia automáticamente una sesión en cada página.
- Normalmente se recomienda mantenerlo en 0 y utilizar la función session_start() de forma explícita.
- session.cookie_lifetime
- Indica cuánto tiempo vive la cookie de sesión.
- Si vale 0, la cookie se elimina al cerrar el navegador.
- session.gc_maxlifetime
- Indica el tiempo en segundos que los datos de sesión pueden permanecer inactivos antes de eliminarse.
- Por defecto suele ser 1440 segundos (24 minutos).
Creando la sesión
|
De forma coloquial:
Tip: En algunos casos la sesión puede permanecer activa durante un tiempo incluso después de cerrar el navegador.
|
Comparación de qué es una sesión
| |
|
Crear y usar una sesión
- Para usar sesiones normalmente debemos iniciarlas de forma explícita.
- Esto se hace mediante la función session_start().
<?php session_start(); $_SESSION['nombre'] = 'manuel'; ?>
- Hemos creado la variable de sesión nombre.
- Mientras dure la sesión, cualquier script podrá acceder a esa información.
En otro fichero PHP:
<?php session_start(); $usuario = $_SESSION['nombre']; ?>
Eliminando la sesión
- Las sesiones pueden eliminarse automáticamente tras un tiempo de inactividad.
- También podemos eliminarlas manualmente.
- session_unset
- Elimina las variables almacenadas en la sesión actual.
- session_destroy
- Elimina completamente los datos de la sesión.
Cuando se produce un cambio de estado importante (por ejemplo un login), es recomendable regenerar el identificador de sesión:
session_regenerate_id();
Esto ayuda a evitar ataques de session fixation.
Actividades
$_SESSION['usuario'] para comprobar si el usuario está autenticado.
|
