Las sesiones normalmente se suelen usar para mantener "logueado" un usuario en una web.
El funcionamiento de una sesión es realmente un fichero que se almacena en /var/lib/php5 o /tmp/, según la variable session.save_path de la configuración de apache /etc/php5/apache2/php.ini.
Iniciar sesión
session_start();
Guardar información en la sesión
$_SESSION["usuario"] = "Pepe";
Borrar dato de la sesión
unset( $_SESSION['usuario'] );
Borrar toda la sesión
session_destroy();
Las sesiones se bloquean
Por lo que se dificultan las conexiones concurrentes o simultáneas, cuando un usuario entra en tu web, se ejecuta session_start el servidor internamente intenta leer el fichero de sesión correspondiente al usuario, haciendo esperar las siguientes conexiones, normalmente toma segundos en ejecutar un script por lo que apenas se nota a no ser que tengamos muchos usuarios y peticiones muy lentas.
Si sólo necesitamos leer la sesión y no nos hace falta escribir sobre ella, lo mejor es cerrar esa conexión con la función session_write_close() inmediatamente después de session_start().
Cuando ejecutemos session_write_close() las variables $_SESSION seguirán siendo accesibles pero no podremos escribir sobre ellas si lo hacemos el servidor simplemente ignorará estos cambios.
¿Cómo evitar bloqueos?
1- Memcached
Es un sistema muy rápido que almacena los datos en memoria y permite tener sesiones compartidas entre servidores.
2- Base de datos
Otra alternativa es guardar las sesiones en una tabla de la base de datos, frameworks como Zend 2 lo hacen así.
Un apunte muy pequeño para terminar de cerrar el asunto de las sesiones.
Si quieres guardar un objecto "usuario" de una clase creada "Usuario" con todos sus atributos debes serializar el objeto antes de guardarlo en la sesión.
Por ejemplo:
$user = new Usuario('nombre', 'apellido', 'lugar_nacimiento',...)
$_SESSION['usuario'] = serialize($user);
y cuando quieras rescatar el objeto de la sesión desde otro sitio, el proceso inverso:
$user = unserialize($_SESSION['usuario'])
No se te deben olvidar los require('path/Usuario.class.php') o include donde hagas uso de estos objetos.
El funcionamiento de una sesión es realmente un fichero que se almacena en /var/lib/php5 o /tmp/, según la variable session.save_path de la configuración de apache /etc/php5/apache2/php.ini.
Iniciar sesión
session_start();
Guardar información en la sesión
$_SESSION["usuario"] = "Pepe";
Borrar dato de la sesión
unset( $_SESSION['usuario'] );
Borrar toda la sesión
session_destroy();
Las sesiones se bloquean
Por lo que se dificultan las conexiones concurrentes o simultáneas, cuando un usuario entra en tu web, se ejecuta session_start el servidor internamente intenta leer el fichero de sesión correspondiente al usuario, haciendo esperar las siguientes conexiones, normalmente toma segundos en ejecutar un script por lo que apenas se nota a no ser que tengamos muchos usuarios y peticiones muy lentas.
Si sólo necesitamos leer la sesión y no nos hace falta escribir sobre ella, lo mejor es cerrar esa conexión con la función session_write_close() inmediatamente después de session_start().
Cuando ejecutemos session_write_close() las variables $_SESSION seguirán siendo accesibles pero no podremos escribir sobre ellas si lo hacemos el servidor simplemente ignorará estos cambios.
¿Cómo evitar bloqueos?
1- Memcached
Es un sistema muy rápido que almacena los datos en memoria y permite tener sesiones compartidas entre servidores.
2- Base de datos
Otra alternativa es guardar las sesiones en una tabla de la base de datos, frameworks como Zend 2 lo hacen así.
04/04/2014 02:52
Si quieres guardar un objecto "usuario" de una clase creada "Usuario" con todos sus atributos debes serializar el objeto antes de guardarlo en la sesión.
Por ejemplo:
$user = new Usuario('nombre', 'apellido', 'lugar_nacimiento',...)
$_SESSION['usuario'] = serialize($user);
y cuando quieras rescatar el objeto de la sesión desde otro sitio, el proceso inverso:
$user = unserialize($_SESSION['usuario'])
No se te deben olvidar los require('path/Usuario.class.php') o include donde hagas uso de estos objetos.