Manuales Gratis de PHP en Perú
Tutorial de sesiones en PHP
Describimos los metodos de trabajo con sesiones en PHP, inicializar sesión, crear variables de sesión o recuperarlas.
Las sesiones, en aplicaciones web realizadas con PHP y en el desarrollo
de páginas web en general, nos sirven para almacenar información que se
memorizará durante toda la visita de un usuario a una página web. Dicho
de otra forma, un usuario puede ver varias páginas durante su paso por
un sitio web y con sesiones podemos almacenar variables que podremos
acceder en cualquiera de esas páginas.
Digamos que las sesiones son una manera de guardar información,
específica para cada usuario, durante toda su visita. Cada usuario que
entra en un sitio abre una sesión, que es independiente de la sesión de
otros usuarios. En la sesión de un usuario podemos almacenar todo tipo
de datos, como su nombre, productos de un hipotético carrito de la
compra, preferencias de visualización o trabajo, páginas por las que ha
pasado, etc. Todas estas informaciones se guardan en lo que denominamos
variables de sesión.
PHP dispone de un método bastante cómodo de guardar datos en
variables de sesión, y de un juego de funciones para el trabajo con
sesiones y variables de sesión. Lo veremos en este artículo.
Para cada usuario PHP internamente genera un identificador de
sesión único, que sirve para saber las variables de sesión que
pertenecen a cada usuario. Para conservar el identificador de sesión
durante toda la visita de un usuario a una página PHP almacena la
variable de sesión en una cookie, o bien la propaga a través de la URL.
Esto se puede configurar desde el archivo php.ini.
Trabajo con sesiones en PHP
Cuando queremos utilizar variables de sesión en una página tenemos que iniciar la sesión con la siguiente función:
session_start ()
Inicia una sesión para el usuario o continúa la sesión que pudiera
tener abierta en otras páginas. Al hacer session_start() PHP
internamente recibe el identificador de sesión almacenado en la cookie
o el que se envíe a través de la URL. Si no existe tal identificador se
sesión, simplemente lo crea.
| Nota: Si en el php.ini se ha definido la variable
session.auto_start = 1 se inicializa automáticamente la sesión en cada
página que visita un usuario, sin que se tenga que hacer el
session_start() |
Una vez inicializada la sesión con session_start() podemos a partir
de ahora utilizar variables de sesión, es decir, almacenar datos para
ese usuario, que se conserven durante toda su visita o recuperar datos
almacenados en páginas que haya podido visitar.
La sesión se tiene que inicializar antes de escribir cualquier
texto en la página. Esto es importante y de no hacerlo así corremos el
riesgo de recibir un error, porque al iniciar la sesión se deben leer
las cookies del usuario, algo que no se puede hacer si ya se han
enviado las cabeceras del HTTP.
Nota: si se intenta abrir una sesión después de haber enviado texto de la página al cliente se obtendrá el siguiente mensaje:
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at …) |
Una vez iniciada la sesión podemos utilizar variables de sesión a
través de $_SESSION, que es un array asociativo, donde se accede a cada
variable a partir de su nombre, de este modo:
$_SESSION["nombre_de_variable"]
| Nota: $_SESSION es una variable global que existe a partir de
PHP 4.1.0. Lo normal es que podamos acceder a esa variable normalmente,
pero si nuestra versión de PHP no está actualizada podemos intentarlo
con $HTTP_SESSION_VARS, que es también un array asociativo, aunque no
es de ámbito global. Si $HTTP_SESSION_VARS tampoco funciona tendremos
que registrar cada variable por separado con la función
session_register(), enviándo por parámetro los nombres de las variables
de sesión que desea utilizar desde PHP. |
Existen otras dos configuraciones del php.ini que afectan al trabajo
con variables de sesión, que son track_vars y register_globals. Por
defecto track_vars está activado y register_globals está desactivado.
Este es el caso normal y el que suponemos tendrá el servidor donde
programes, pero si esas variables cambian podría cambiar alguna cosita,
como que las variables se tengan que registrar explícitamente con
session_register().
Ejemplo de código para definir una variable de sesión:
<?
session_start();
?>
<html>
<head>
<title>Generar variable de sesión</title>
</head>
<body>
<?
$_SESSION["mivariabledesesion"] = "Hola este es el valor de la variable de sesión";
?>
</body>
</html>
Como se puede ver, es importante inicializar la sesión antes de
hacer otra cosa en la página. Luego podremos definir variables de
sesión en culquier lugar del código PHP de la página.
Para leer una variable de sesión se hace a través del mismo
array asociativo $_SESSION. Es tan sencillo como haríamos para utilizar
cualquier otra variable, lo único es que tenemos que haber inicializado
la sesión previamente. Y por supuesto, que la variable que deseamos
acceder exista previamente.
<?
session_start();
?>
<html>
<head>
<title>Leo variable se sesión</title>
</head>
<body>
Muestro esa variable:
<?
echo $_SESSION["mivariabledesesion"];
?>
</body>
</html>
Como se puede ver, al inicio del código hemos inicializado la
sesión y luego en cualquier parte del código podríamos acceder a las
variables de sesión que tuviésemos creadas.
| Nota: si intentamos acceder a una variable de sesión con
$_SESSION que no ha sido creada obtendremos otro mensaje de error:
Notice: Undefined index: mivariabledesesion, que es el mismo que si
intentamos acceder a cualquier elemento de un array que no existe. |
Más sobre sesiones en PHP
La siguiente información sobre sesiones de PHP también puede ser
de útil lectura. No obstante lo expresado hasta aquí es una información
mucho más actualizada. En las próximas líneas se explican mecanismos
para sesiones pero todos los que se comentan, aunque son válidos, no
son actuales por tratarse de explicaciones para versiones de PHP más
antiguas.
Hemos dicho en el capítulo anterior que la variables de sesión
se diferencian de las variables clásicas en que éstas residen en el
servidor, son especificas de un solo usuario definido por un
identificador y pueden ser utilizadas en la globalidad de nuestras
páginas.
Para iniciar una sesión podemos hacerlo de dos formas distintas:
-Declaramos abiertamente la apertura de sesión por medio de la función session_start(). Esta función crea una nueva sesión para un nuevo visitante o bien recupera la que está siendo llevada a cabo.
-Declaramos una variable de sesión por medio de la función session_register('variable').
Esta función, además de crear o recuperar la sesión para la página en
la que se incluye también sirve para introducir una nueva variable de
tipo sesión.
Las sesiones han de ser iniciadas al principio de nuestro script.
Antes de abrir cualquier etiqueta o de imprimir cualquier cosa. En caso
contrario recibiremos un error.
Con lo visto, vamos a proponer el ejemplo clásico de utilización de
una sesión: un contador. Este contador deberá aumentar de una unidad
cada vez que recargamos la página o apretamos al enlace:
<?
session_register('contador');
?>
<HTML>
<HEAD>
<TITLE>contador.php</TITLE>
</HEAD>
<BODY>
<?
If (isset($contador)==0)
{$contador=0;}
++$contador;
echo "<a href=\"contador.php\">Has recargado esta página $contador veces</a>";
?>
</BODY>
</HTML> |
La condición if tiene en cuenta la posibilidad de que la variable $contador no haya sido todavía inicializada. La función isset se encarga de dar un valor cero cuando una variable no ha sido inicializada.
Otras funciones útiles para la gestión de sesiones son:
| Función |
Descripción |
| Session_id() |
Nos devuelve el identificador de la sesión |
| Session_destroy() |
Da por abandonada la sesión eliminando variables e identificador. |
| Session_unregister('variable') |
Abandona una variable sesión |
Foro Sobre Php, Si te estas iniciando en el Lenguaje Php aqui puedes poner tus dudas |