Вы находитесь на странице: 1из 2

Sesiones (II)

Variables de sesión
Con cualquier opción de register_globals
La verdadera utilidad de trabajar
con sesiones estriba en la Aquí tenemos un ejemplo en el que utilizamos las funciones PHP específicas para el
posibilidad de propagar junto con tratamiento de sesiones.
ellas los valores de las variables de
sesión. En el caso de que la versión de PHP no admitiera superglobales habría que sustituir
$_SESSION por $HTTP_SESSION_VARS y tener presente el carácter no global de esta
Se trata de ir añadiendo y última variable.
propagando variables con sus
valores, y de la posibilidad de
utilizarlas de la misma forma que <?
se utilizarían las variables externas # iniciamos la sesión
enviadas a través de un formulario. session_start();
# visualizamos el identificador de sesión
Igual que ocurría en caso de los echo "Este es el identificador de sesion: ",session_id(),"<br>";
formularios, también las variables # registramos una variable de sesión asignandole un nombre
de sesión pueden ser tratadas de
$_SESSION['variable1'];
forma distinta según como estén
configurado PHP (php.ini) y cual #asignamos un valor a esa variable de sesión
sea la versión de PHP que $_SESSION['variable1']="Filiberto Gómez";
utilicemos. # registramos una nueva variable de sesión
#asignandole directamente un valor
$_SESSION['variable2']="Otro filiberto, este Pérez";
Register globals #comprobamos la existencia de la variables de sesión
echo "Mi_variable1 esta registrada: ",
Las variables de sesión tienen, isset($_SESSION['variable1']),"<br>";
como ocurría en otros casos, una #leemos el contenido de esa variable
sintaxis común (que no depende print "Su valor es: ".$_SESSION['variable1']."<br>";
de la configuración de la directiva
#comprobamos la existencia de la otra variable y la visualizamos
register globals) y una específica –
echo "Mi variable2 esta registrada :",
añadida a la anterior– para el caso
en que register globals esté isset($_SESSION['variable2']),"<br>";
activado. print $_SESSION['variable2']."<br>";
#destruimos la variable1
A diferencia de los casos que unset($_SESSION['variable1']);
hemos visto anteriormente, echo "La variable1 ha sido destruida:",
cuando se trata de sesiones no isset($_SESSION['variable1']),"<br>";
existe la similitud sintáctica que print $_SESSION['variable1']."<br>";
existía en aquellos casos.
#destruimos todas las variables restantes
Esa es la razón por la que no unset($_SESSION);
vamos a incluirla. Su utilidad #comprobamos que han sido destruidas
práctica es nula y podría crearnos
cierta confusión. echo "La variable1 ya estaba vacia:",
isset($_SESSION['variable1']),"<br>";
El hecho de que PHP mantenga print $_SESSION['variable1']."<br>";
activas las funciones de esa opción
obedece únicamente a razones de
echo "También ha sido destruida la variable2: ",
tipo práctico. La decisión de
eliminarlas de las nuevas versiones
$_SESSION['variable2'],"<br>";
podría ocasionar serios perjuicios a print $_SESSION['variable2']."<br>";
programadores que tienen
desarrolladas sus aplicaciones con ?>
la antigua sintaxis y que se verían
obligados a modificar el código
fuente de todos sus scripts Ejemplo 128.php
anteriores.

Propagación de sesiones
Manejo de variables
Los tres scripts siguientes son un ejemplo del uso de sesiones para la propagación de
Las funciones más importantes
para el manejo de variables de
sesiones.
sesión son las siguientes:
Funcionan bajo cualquier forma de register_globals y también en el caso en que las
$_SESSION['var'] cookies estuvieran desactivadas en el navegador del cliente

es una de las formas de definir una


<?
variable de sesión.
/* recuerda que entre <? y la primera línea no puede haber
El índice var debe contener –entre líneas en blanco ni tampoco puede haberla encima de <?
comillas– el nombre que aunque como en este caso, si admite líneas de comentario
pretendamos asignarle a esa pero no líneas en blanco */
variable de sesión. # deactivamos la opcion de que las páginas puedan guardarse
# en la cache del navegador del cliente
Si la variable ya existiera le
session_cache_limiter('nocache,private');
reasignaría un valor nulo.
# le asignamos un nombre a la sesión
$HTTP_SESSION_VARS['v'] # aunque lo habitual sería dejar el nombre por defecto
# que le asigna la configuración de php.ini
Es complementaria de la anterior session_name('pruebas');
en el caso de que PHP acepte # iniciamos la sesion
variables superglabales. session_start();
En en caso de que no fueran
# creamos variables de sesion y les asignamos valores
aceptadas sería la opción
alternativa a aquella.
$_SESSION['valor1']=25;
$_SESSION['valor2']="Ambrosio de Morales";
Ambas se comportan igual que $_SESSION['variable3']="Una prueba más";
cualquier otra variable. Tanto si /* cerramos el script e insertamos un enlace a otra página
existieran previamente como si no y propagamos la sesión incluyendo en la llamada
hubieran sido creadas el nombre de la session y su identificador
anteriormente le asignaría el valor En esta página no se visualizaría nada. Solo el enlace */
indicado. ?>
<A Href="ejemplo130.php?<?echo session_name()."=".session_id()?>">
unset($_SESSION); Propagar la sesion</A>
La función unset destruye las
variables contenidas en el
paréntesis. En este caso, al
Ejemplo 129.php
contener el array $_SESSION
destruiría todas las variables
contenidas en él.
<?
unset($_SESSION['var']); /* pese a que la sesion viene de la página anterior
tenemos que poner nuevamente session_cache_limiter
Es similar a la anterior. En este ya que esta instruccion no se conserva
caso solo sería destruida la
solo es válida para la página en la que esta definida
variable de sesión indicada en var.
También tenemos que poner en session_name el mismo
isset($_SESSION['var']); nombre de la página anterior, de no hacerlo
PHP entendería que se trata de iniciar una sesion distinta
La función isset –no es específica Por ultimo también debemos iniciar la sesión
del tratamiento de sesiones– es obligatorio iniciarla */
devuelve un valor booleano (UNO session_cache_limiter('nocache,private');
ó NUL) según que exista o no
session_name('pruebas');
exista la variable contenida en el
paréntesis. De hecho, se comporta
session_start();
con las variables de sesión de /* comprobaremos que la sesion se ha propagados
forma idéntica a como lo haría con visualizando el array asociativo $_SESSION
cualquier otro tipo de variable. que contiene todas la variables de Sesion */

foreach($_SESSION as $indice=>$valor){
Propagación de las
print("Variable: ".$indice." Valor: ".$valor."<br>");
variables }
# modificamos los valores de las variables de sesion
Las variables $_SESSION['var'] # de igual forma que si fueran variables de cualquier otro tipo
creadas en cualquier página, se
propagan a todas las demás $_SESSION['valor1']+=87;
páginas a las que se propague la $_SESSION['valor2'] .=" bonito nombre";
sesión, sin que para ello sea
# destruimos la tercera variable
necesaria ninguna actuación
específica. unset($_SESSION['variable3']);

Bastará con propagar la sesión # propagamos la sesion a la página siguiente


siguiendo los procedimientos # con identico proceso al del script anterior
descritos en la página anterior ?>
para que las variables sean <A Href="ejemplo131.php?<?echo session_name()."=".session_id()?>">
transferidas automáticamente. Propagar la sesion</A>
Esa es la verdadera utilidad de
este tipo de variables.

Recuerda que para transferir otros


tipos de variables teníamos que <?
recurrir a formularios o a incluir # identicos comentarios a los anteriores
todas las parejas nombre=valor en session_cache_limiter('nocache,private');
la dirección de la página que
session_name('pruebas');
habría de recibirlas. No cabe duda
que este método añade un gran session_start();
factor de comodidad y utilidad a la # este bucle nos confirmará que se han propagado
transferencia de información entre # los nuevos valores y que la tercera variable ha sido destruida
páginas del mismo espacio de foreach($_SESSION as $indice=>$valor){
servidor. print("Variable: ".$indice." Valor: ".$valor."<br>");
}
Aunque resulta obvio, quizá no ?>
esté de más comentar que las
variables de sesión no se
transmiten más que entre páginas
alojadas en el mismo espacio de
servidor. Anterior Indice Siguiente

Вам также может понравиться