Referencia de funciones
PHP Manual

Funciones para el manejo de sesiones

El apoyo que PHP proporciona para las sesiones consiste en una forma de conservar ciertos datos a lo largo de los subsiguientes accesos, lo cual le permite construir aplicaciones más personalizadas e incrementar el atractivo de su sitio web.

Si ya está familiarizado con el tratamiento de sesiones de PHPLIB, notará que algunos conceptos son similares al soporte de las sesiones de PHP.

A cada visitante que accede a su web se le asigna un identificador único, llamado "session id" (identificador de sesión). Éste se almacena en una cookie por parte del usuario o se propaga en la URL.

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 session.auto_start está puesto a 1) o cuando usted lo especifique (de forma explícita mendiante session_start() o implícita a través de session_register()) 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.

Todas las variables registradas son almacenadas tras finalizar la petición. Las variables que están indefinidas se marcan como no definidas. En los subsiguientes accesos, no estarán definidas por el módulo de sesiones a menos que el usuario las defina más tarde.

Las opciones de configuración track_vars y register_globals influyen notablemente en la forma en que las variables de la sesión se almacenan y restauran.

Note: A partir de PHP 4.0.3, track_vars siempre está activado.

Note: A partir de PHP 4.1.0, $_SESSION está disponible como variable global, al igual que $_POST, $_GET, $_REQUEST y demás. Al contrario que $HTTP_SESSION_VARS, $_SESSION siempre es global. Por tanto, no se debe usar global para $_SESSION.

Si track_vars está activado y register_globals está desactivado, sólo los miembros del vector asociativo global $HTTP_SESSION_VARS pueden ser registrados como variables de la sesión. Las variables restauradas de la sesión sólo estarán disponibles en el vector $HTTP_SESSION_VARS.

Example#1 Registrar una variable con track_vars activado

<?php
session_start
();
if (isset(
$HTTP_SESSION_VARS['count'])) {
   
$HTTP_SESSION_VARS['count']++;
}
else {
   
$HTTP_SESSION_VARS['count'] = 0;
}
?>

Se recomienda usar $_SESSION (o $HTTP_SESSION_VARS con PHP 4.0.6 o inferior) por seguridad y para hacer el código más legible. Con $_SESSION o $HTTP_SESSION_VARS, no es necesario usar las funciones session_register() / session_unregister() / session_is_registered(). Los usuarios pueden acceder a una variable de la sesión como si se tratase de una variable normal.

Example#2 Registrar una variable con $_SESSION.

<?php
session_start
();
// Use $HTTP_SESSION_VARS con PHP 4.0.6 o inferior
if (!isset($_SESSION['count'])) {
    
$_SESSION['count'] = 0;
} else {
    
$_SESSION['count']++;
}
?>

Example#3 Borrar una variable con $_SESSION.

<?php
session_start
();
// Use $HTTP_SESSION_VARS con PHP 4.0.6 o inferior
unset($_SESSION['count']);
?>

Si register_globals está activado, todas las variables globales pueden ser registradas como variables de la sesión, y las variables de la sesión serán restauradas a sus correspondientes variables globales. Como PHP debe saber qué variables globles están registradas como variables de la sesión, los usuarios deben registrar las variables con la función session_register(), mientras que con $HTTP_SESSION_VARS/$_SESSION no es necesario usar session_register().

Caution

Si está usando $HTTP_SESSION_VARS/$_SESSION y desactiva register_globals, no use session_register(), session_is_registered() ni session_unregister().

Si activa register_globals, session_unregister() debería ser usado a partir de que las variables de la sesión sean registradas como variables globales cuando los datos de la sesión se guardan. Se recomienda desactivar register_globals por motivos de seguridad y rendimiendo.

Example#4 Registrar una variable con register_globals activado

<?php
if (!session_is_registered('count')) {
    
session_register("count");
    
$count 0;
}
else {
    
$count++;
}
?>

Si track_vars y register_globals están activados, las variables globales y las entradas de $HTTP_SESSION_VARS/$_SESSION harán referencia al mismo valor para variables ya registradas.

Si el usuario utiliza session_register() para registrar una variable, el vector $HTTP_SESSION_VARS/$_SESSION no contendrá esa variable hasta que se cargue de los datos de la sesión. (p.ej. hasta la próxima petición).

Hay dos formas de propagar un "session id":

El módulo de sesiones admite ambas formas. Las Cookies son la mejor opción, pero como no son fiables (los clientes no están obligados a aceptarlas), no podemos confiar en ellas. El segundo método incrusta el "session id" directamente en las URLs.

PHP es capaz de hacerlo de forma transparente al usuario cuando se compila con --enable-trans-sid. Si activa esta opción, las URIs relativas serán modificadas de forma que contengan el session id automáticamente. Alternativamente, puede usar la constante SID que está definida, si el cliente no envía la cookie adecuada. El SID puede tener la forma de nombre_de_sesion=session_id o ser una cadena vacía.

El ejemplo siguiente demuestra cómo registrar una variable, y cómo colocar correctamente un enlace a otra página usando la constante SID.

Example#5 Contar el número de impresiones de un usuario

<?php
if (!session_is_registered('count')) {
    
session_register('count');
    
$count 1;
}
else {
    
$count++;
}
?>

Hola, visitante. Has visto esta p&aacute;gina <?php echo $count?> veces.

<?php
# el <?php echo SID?> (Se puede usar <?=SID?> si short tag est&aacute; activado)
# es necesario para conservar el session id
# en caso de que el usuario haya desactivado las cookies
?>

Para continuar, haga click <A HREF="nextpage.php?<?php echo SID?>">aqu&iacute;</A>.

El <?=SID?> no es necesario si se ha usado --enable-trans-sid al compilar PHP.

Note: Se asume que las URLs no relativas apuntan a sitios web externos, y por tanto no se añade el SID, ya que pasar el SID a un servidor diferente podría ocasionar un agujero de seguridad.

Para implementar el almacenamiento en bases de datos o en otro tipo de almacenamiento, necesitará usar session_set_save_handler()() para crear una colección de funciones de almacenamiento a nivel de usuario.

El sistema de control de sesiones soporta varias opciones de configuración que puede colocar en su archivo php.ini. Les daremos un pequeño repaso.

Note: El manejo de sesiones fue añadido en PHP 4.0.

Table of Contents


Referencia de funciones
PHP Manual