&reftitle.examples;
Uso básico Las sesiones son una forma sencilla de almacenar datos para usuarios de manera individual usando un ID de sesión único. Esto se puede usar para hacer persistente la información de estado entre peticiones de páginas. Los ID de sesiones normalmente son enviados al navegador mediante cookies de sesión, y el ID se usa para recuperar los datos de sesión existente. La ausencia de un ID o una cookie de sesión permite saber a PHP para crear una nueva sesión y generar un nuevo ID de sesión. Las sesiones siguen un flujo de trabajo sencillo. Cuando una sesión se inicia, PHP recuperará una sesión existente usando el ID pasado (normalmente desde una cookie de sesión) o, si no se pasa una sesión, se creará una sesión nueva. PHP rellenará la variable superglobal $_SESSION con cualesquiera datos de la sesión iniciada. Cuando PHP se cierra, automáticamente toma el contenido de la variable superglobal $_SESSION, la serializa, y la envía para almacenarla usando el gestor de almacenamiento de sesiones. Por omisión, PHP usa el gestor interno de almacenamiento files, el cual se establece mediante session.save_handler. Éste guarda los datos de sesión en el servidor en la ubicación especificada por la directiva de configuración session.save_path. Las sesiones se puede iniciar manualmente usando la función session_start, si la directiva session.auto_start se establece a 1, una sesión se iniciará automáticamente ante cualquier petición de arranque. Las sesiones normalmente se cierran automáticamente cuando PHP termina de ejecutar un script, pero se pueden cerrar manualmente usando la función session_write_close. Registrar una variable con <varname>$_SESSION</varname>. ]]> Desregistrar una variable con <varname>$_SESSION</varname> ]]> NO destruya completamente $_SESSION con unset($_SESSION) ya que esto deshabilitará el registro de las variables a través del array superglobal $_SESSION. No se pueden usar referencias en variables de sesión ya que no hay una manera viable de restarurar una referencia a otra variable. register_globals sobreescribirá las variables en el ámbito global, cuyos nombres son compartidos con las variables de sesión. Por favor véase Uso de Register Globals para más detalles. Las sesiones basadas en ficheros (lo predeterminado en PHP) bloquean el fichero de sesión una vez que una sesión se abre vía session_start o implícitamente vía session.auto_start. Mientras esté bloqueado, ningún otro script puede acceder al mismo fichero de sesión hasta que haya sido cerrado al terminar de ejecutarse el primer script, o llamando a session_write_close. Esto suele provocar problemas en aquellos sitios Web que realizan muchas peticiones AJAX y tienen solicitudes mútliples ejécutandose a la vez. La manera más fácil de lidiar con esto es llamando a session_write_close tan pronto como se haya realizado un cambio requeirdo a la sesión, preferiblemente antes de finalizar el script. Alternativamente, se podría utilizar una sesión diferente en segundo plano que admita concurrencia.
Pasar el ID de Sesión Hay dos métodos para propagar un id de sesión: Cookies Parámetro de URL El módulo de sesiones soporta ambos métodos. Las cookies son óptimas, pero ya que no están siempre disponibles, también se proporciona una manera alternativa. El segundo método embebe el id de sesión directamente en las URL. PHP es capaz de transformar enlaces transparentemente. A menos que se use PHP 4.2.0 o posterior, se necesita habilitarlo manualmente cuando se construye PHP. Bajo Unix, pase --enable-trans-sid para la configuración. Si esta opción de construcción y la opción en tiempo de ejecución session.use_trans_sid están habilitadas, las URI relativas se modificarán para contener el id de sesión automáticamente. La directiva de &php.ini; arg_separator.output permite personalizar el separador de argumentos. Para una conformidad completa con XHTML, especifique &amp; allí. Alternativamente, se puede usar la constante SID, que está definida si la sesión se inició. Si el cliente no envía una cookie de sesión apropiada, tiene la forma session_name=session_id. De otro modo se desarrolla en una cadena vacía. Así, se puede embeberla incondicionalmente dentro de las URL. El siguiente ejemplo muestra cómo registrar una variable, y cómo enlazar correctamente a otra página usando SID. Contar el número de peticiones de un sólo usuario

Hola visitante, ha visto esta página veces.

Para continuar, haga clic aquí.

]]>
La función htmlspecialchars se puede usar cuando se imprime SID para prevenir ataques relacionados con XSS. Imprimir SID, como se mostró arriba, no es necesario si --enable-trans-sid se usó para compilar PHP. Se asume que las URL no relativas apuntan a sitios externos y por lo tanto no añaden SID, ya que sería un riesgo para la seguridad filtrar SID a un servidor diferente.
Gestores de Sesión Personalizados Para implementar el almacenamiento en bases de datos, o cualquier otro método de almacenamiento, se necesita usar session_set_save_handler para crear un conjunto de funciones de almacenamiento a nivel de ususario. A partir de PHP 5.4.0 se pueden crear gestores de sesiones usando la clase SessionHandlerInterface o extendiendo los gestores internos de PHP heredando de la clase SessionHandler. Las llamadas de retorno especificadas en session_set_save_handler son métodos llamados por PHP durante el ciclo de vida de una sesión: open, read, write y close, y para las tareas domésticas: destroy para borrar una sesión y gc para la recoleción periódica de basura. Por lo tanto, PHP siempre necesita gestores de almacenamiento de sesiones. El predeterminado normalmente es el gestor de almacenamiento interno 'files'. Se puede establecer un gestor de almacenamiento personalizado usando session_set_save_handler. Se pueden porporcionar de forma alternativa gestores de almacenamiento interno mediante extensiones de PHP, tales como sqlite, memcache y memcached y pueden establecerse con session.save_handler. Cuando se inicia la sesión, PHP llamará internamente al gestor open seguido de la llamada de retorno read la cual debería devolver una cadena codificada exactamente como si fuera pasada originalmente para almacenamiento. Una vez que la llamada de retorno read devuelve la cadena codificada, PHP la decodificará y rellenará el array resultante en la variable superglobal $_SESSION. Cuando PHP se cierra (o se llama a session_write_close), PHP codificará internamente la variable superglobal $_SESSION y la pasará conjuntamente con el ID de sesión a la llamada de retorno write. Después de finalizada la llamada de retorno write, PHP invocará internamente al gestor de llamada de retorno close. Cuando una sesión se destruye de forma específica, PHP llamará al gestor destroy con el ID de sesión. PHP llamará a la llamada de retorno gc de vez en cuando para terminar cualquier registro de sesión según lo establecido en el tiempo de vida máximo de una sesión. Esta rutina debería borrar todos los registros del almacenamiento persistente a los que se accedió por última vez más allá del parámetro $lifetime.