&reftitle.examples;
Uso básico
A partir de PHP 4.1.0, $_SESSION está disponible como una
variable global como $_POST,
$_GET, $_REQUEST, etc.
A diferencia de $HTTP_SESSION_VARS,
$_SESSION es siempre global. Por lo tanto, no se necesita
usar la palabra clave global
para $_SESSION. Por favor, observe que esta
documentación ha sido modifiada para usar
$_SESSION en cualquier lugar. Puede sustituir
$HTTP_SESSION_VARS por
$_SESSION, si prefiere la antigua. Observe también
que se debe iniciar una sesión usando session_start
antes de que el uso de $_SESSION esté disponible.
Las claves en la matriz asociativa $_SESSION
están sujetas a las mismas limitaciones que los nombres
de las variables normales de PHP, esto es, no pueden
comenzar con un número y deben comenzar con una letra o guión de subrayado.
Para más detalles vea la sección sobre
variables en este manual.
Si register_globals
está deshabilitado, sólo los miembros de la matriz asociativa global
$_SESSION pueden ser registrados como variables de
sesión. Las variables de sesión almacenadas sólo estarán disponibles
en la matriz $_SESSION.
Se recomienda el uso de $_SESSION (o
$HTTP_SESSION_VARS con PHP 4.0.6 o anterior)
para mejorar la seguridad y la legibilidad del código. Con
$_SESSION no hay necesidad de usar las funciones
session_register,
session_unregister o
session_is_registered. Las variables de sesión
son accesibles como cualquier otra variable.
Registrar una variable con $_SESSION.
]]>
Dejar de registrar una variable con $_SESSION y
register_globals deshabilitado.
]]>
NO destruya completamente $_SESSION con
unset($_SESSION) ya que esto deshabilitará el
registro de las variables a través de la matriz 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.
Si register_globals
está habilitado, cada variable global puede ser segistrada como variable de
sesión. Sobre una restauración de una sesión, estas variables serán restauradas
a las variables globales correspondientes. Ya que PHP debe conocer qué variables
globales están registradas como variables de sesión, los usuarios necesitan registrar
las variables con la función session_register.
Se puede evitar esto estableciendo simplemente entradas en
$_SESSION.
Antes de PHP 4.3.0, si está usando $_SESSION y tiene
deshabilitado register_globals,
no use session_register,
session_is_registered o
session_unregister.
Se recomienda deshabilitar register_globals
por razones de seguridad y rendimiento.
Si register_globals
está habilitado, las variables globales y las entradas de
$_SESSION referenciarán automáticamente los
mismos valores que fueron registrados en la instancia de sesión anterior.
Sin embargo, si la variable es registrada mediante $_SESSION,
la variable global está disponible desde la siguiente petición.
Existe un defecto en PHP 4.2.3 y anteriores. Si se registra una nueva
variable de sesión usando session_register, la
entrada en el ámbito global y la entrada de $_SESSION
no referenciarán el mismo valor hasta el siguiente uso de
session_start. Esto es, una modificación en la
variable global registrada más recientemenet no será reflejada por la entrada de
$_SESSION. Esto ha sido corregido en PHP 4.3.0.
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 & 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
]]>
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.