Please note that if you have register_globals to On, global variables associated to $_SESSION variables are references, so this may lead to some weird situations.
<?php
session_start();
$_SESSION['test'] = 42;
$test = 43;
echo $_SESSION['test'];
?>
Load the page, OK it displays 42, reload the page... it displays 43.
The solution is to do this after each time you do a session_start() :
<?php
if (ini_get('register_globals'))
{
foreach ($_SESSION as $key=>$value)
{
if (isset($GLOBALS[$key]))
unset($GLOBALS[$key]);
}
}
?>
$_SESSION
$HTTP_SESSION_VARS [obsoleta]
$_SESSION -- $HTTP_SESSION_VARS [obsoleta] — Variables de sesión
Descripción
Una matriz asociativa que contiene las variables de sesión disponibles en el script actual. Consulte la documentación sobre Funciones de sesión para más información sobre cómo es usada esta matriz.
$HTTP_SESSION_VARS contiene la misma información inicial, pero no es una superglobal. (Note que $HTTP_SESSION_VARS y $_SESSION son variables diferentes y que PHP las trata como tal)
Registro de cambios
| Versión | Descripción |
|---|---|
| 4.1.0 | Se introdujo $_SESSION, haciendo $HTTP_SESSION_VARS obsoleta. |
Notes
Note: This is a 'superglobal', or automatic global, variable. This simply means that it is available in all scopes throughout a script. There is no need to do global $variable; to access it within functions or methods.
$_SESSION
bohwaz
01-Sep-2008 12:43
01-Sep-2008 12:43
Steve Clay
17-Aug-2008 04:28
17-Aug-2008 04:28
Unlike a real PHP array, $_SESSION keys at the root level must be valid variable names.
<?php
$_SESSION[1][1] = 'cake'; // fails
$_SESSION['v1'][1] = 'cake'; // works
?>
I imagine this is an internal limitation having to do with the legacy function session_register(), where the registered global var must similarly have a valid name.
jherry at netcourrier dot com
02-Aug-2008 02:16
02-Aug-2008 02:16
You may have trouble if you use '|' in the key:
$_SESSION["foo|bar"] = "fuzzy";
This does not work for me. I think it's because the serialisation of session object is using this char so the server reset your session when it cannot read it.
To make it work I replaced '|' by '_'.
