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

72 Php. Sesiones II

  • 1.
    Sesiones (II) Variables desesió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. ?>
  • 2.
    <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