I. Introducción
¿Qué son las sesiones? Es uno de los sistemas más usados en PHP para el almacenamiento de variables a lo largo de la navegación por una página web son las sesiones.
Consisten básicamente en variables globales que mantienen su valor a pesar de cambiar de sección dentro de una misma web. Recordamos que existen tres formas de almacenar la información de las variables que más tarde querremos procesar:
-
POST: Envía los datos de forma “oculta” en la cabecera de la página y requiere de un formulario para enviar las variables.
-
GET: Envía la información en la URL. Tiene la ventaja de poder enlazar directamente con los valores de las variables. Limitación de capacidad y falta de confidencialidad.
-
SESIONES: Gracias a las sesiones podremos almacenar el valor de variables cuyo contenido se preservará a lo largo de toda la visita.
Un ejemplo de su gran potencial es, por ejemplo, cuando queremos almacenar el nombre de usuario y la contraseña de una persona a lo largo de su recorrido por la web. Podríamos ir enviando dichos valores mediante el método GET pero tanto el nombre de usuario y la contraseña saldrían visibles en la URL destino. Para asegurar confidencialidad y seguridad, se usan las sesiones.
En definitiva, si queremos almacenar valores en unas determinadas variables y que dichos valores permanezcan a lo largo de una visita sin necesidad de ir enviando formularios ni enviando variables por la URL, el método más cómodo son las sesiones. Veamos como se implementan.
II. Implementación práctica
La implementación no debe suponer ningún problema. Hay que tener claro que en cada página donde queramos mantener el valor de dichas variables hay que añadirle las siguientes líneas de código (cuyo significado se explicará detenidamente más adelante):
<?
session_start();session_register(‘dni_usuario’);
session_register(‘variable_2′);
…
session_register(‘variable_n’);
?>
Es importante añadir que dichas lineas deben estar colocadas al comienzo del fichero HTML. Antes incluso de cualquier etiqueta HTML o código en PHP. Esto es importante pues si no, genera errores.
Como su propia palabra indica, session_start(); indica a la página web en concreto que, en ese fichero HTML queremos usar las variables almacenadas en la sesión.
Posteriormente hay que definir que variables son las que vamos a usar a través de la orden session_register(‘nombre_variable’);
Imaginemos que tenemos tres páginas web:
-
index.php: Donde colocaremos un formulario de login para el usuario y lugar donde se procesarán los datos introducidos en el formulario.
-
contenidos.php: De acceso exclusivo a la gente registrada.
-
noticias.php: Sección que puede tener acceso todo el mundo.
La idea consiste en que, gracias a los datos insertados en la página index.php, el sistema identifique al usuario y le de acceso o no a la página restringida contenidos.php. En el caso de noticias.php no será necesario implementar nada referente a las sesiones pues no se usarán esas variables para procesar absolutamente nada.
En las otras dos páginas (index.php y contenidos.php) será necesario incluir las líneas citadas anteriormente. De esta forma estamos ordenando que dichas páginas “recuperen” el valor de las variables de la sesión para ser usadas en la sección en concreto.
Una vez tenemos dicho a las páginas que vamos a usar las variables de sesión, lo único que queda es saber asignarle valores, quitárselos o recuperarlos. De esta forma, si en la página contenidos debemos verificar si el usuario está registrado o no, podríamos hacer un simple “if” para saber si existe un usuario o no y en caso negativo sacarle el correspondiente error.
Siguiendo con nuestro ejemplo, en index.php y en contenidos.php habrá que colocar las siguientes líneas:
<?
session_start();session_register(‘nombre_usuario’);
session_register(‘clave_usuario’);
?>
De esta forma se han definido dos variables: nombre_usuario y clave_usuario.
Pues bien, en la página index.php lo que haremos será recoger las variables del formulario en cuestión y almacenarlas en las variables de sesión. En este punto se le pueden añadir tantas restricciones como se quieran. Por ejemplo, comprobar mediante una base de datos que el nombre de usuario y la contraseña corresponden a un usuario registrado con anterioridad. En caso de no existir, denegar la identificación.
if($_POST['login']){
$HTTP_SESSION_VARS['nombre_usuario']=$_POST['nombre_usuario'];
$HTTP_SESSION_VARS['clave_usuario']=$_POST['clave_usuario'];
}
En lugar de escribir $HTTP_SESSION_VARS se puede optar por poner $_SESSION cuyo significado es equivalente. En este caso, escriba lo que escriba, se van a almacenar los valores del formulario dentro de la sesión.
Si existiera un botón de “Desconectar”, se podría poner algo así:
if($_POST['desconectar']){
session_unset();
}
De esta forma, a través de session_unset() lo que se hace es eliminar todas las variables que estuvieran definidas en la sesión. De esta forma, cuando la página web intentara reconocer al usuario, vería que no existe por lo que la desconexión se habría realizado con éxito.
En la página contenidos.php podemos incluir un “if” de forma que si existen las dos variables de sesión, se le de acceso. En caso contrario, mostrarle un mensaje de error. También se podría comprobar si las variables de sesión corresponde a un usuario registrado en una base de datos u operaciones similares.
<html><head></head><body>
<?
if(isset($HTTP_SESSION_VARS['nombre_usuario']) && isset($HTTP_SESSION_VARS['clave_usuario'])){
echo “Bievenido a la sección…”;
}
else{
echo “Error: Ha accedido a una sección restringida. Vueva a intentarlo”;
}
?>
</body></html>
Como se puede comprobar, las posibilidades son infinitas. Incluso, si se dispone de un índice, se pueden “anular” accesos en dicho índice comprobando simplemente si el usuario está identificado. Por ejemplo:
<a href=”index.php” mce_href=”index.php”>Principal</a><br>
<a href=”noticias.php” mce_href=”noticias.php”>Noticias</a><br>
<?if(isset($HTTP_SESSION_VARS['nombre_usuario']) && isset($HTTP_SESSION_VARS['clave_usuario'])){
?><a href=”contenidos.php”>Contenidos</a><?}?>
En este caso, si vamos a usar las variables de sesión en el índice, la sección noticias.php ya si requerirá el uso de las variables de sesión por lo que habrá que incluir las mismas líneas que se incluyeron en las otras dos. Solo en el caso de que el usuario esté identificado, le saldrá en el menú el acceso a la sección contenidos.php.
Todo este ejemplo queda disponible en la parte de “Referencias” para su descarga. En él, se dispondrá del código completo para una mejor interpretación.
III. Funciones
A pesar de la explicación anterior, es importante disponer de una buena referencia de funciones usadas en las sesiones. Entendiendo los fundamentos básicos de las sesiones y sabiendo usar adecuadamente cada función, su uso no debería suponer ningún misterio.
A continuación os comento las funciones más importantes. El resto de funciones podéis encontrarlas en las referencias.
session_start
Inicializa los datos de una determinada sesión. Su uso es imprescindible y se coloca justamente donde se indicó en el anterior apartado: Al comienzo de cada página web que requiera su uso.
session_register
Sirve para declarar las variables que se van a usar en la sesión.
session_destroy
Destruye la sesión actual sin destruir ninguna de las variables. Por ejemplo, si usamos este método únicamente para desconectar a un usuario, no serviría pues las variables asociadas a su identificación seguirían activas. Haría falta borrar dichos valores.
session_unset
Borra las variables asociadas a una sesión eliminando su valor.
IV. Conclusiones
El uso de las sesiones está del todo difundido en las páginas web con un mínimo de programación. Su uso es muy sencillo y da un enorme potencial de trabajo: Identificación de usuario, variables globales de la página o cualquier otro tipo de variable que se quiera almacenar durante todo el recorrido de una página. Incluso se podría ir almacenando el historial de visita de cada usuario de la web.
Las posibilidades son infinitas y su implementación, tal y como habéis visto, bien sencilla.
es una mierda. NO entiendo un pedo
No es una mierda, la verda que esta muy bien explicao si señor, a lo mejor no funcionará por que soy un manazas y puede ser que no este todo bien hecho pero las cosas que de verdad tienen importancia me han quedado claras.
Al resto no se a mi me ha servido de mucho. Graias
Emanuel mira primero lee un poco de php y enterate para que puedas seguir el codigo no seas inutil
Oie viejo ta muy wena tu explicacion sobre las variables de sesion, el ejemplo esta bien, al comienzo no le entendi un carajo pero despues lo analice bien ya se como funciona.
Gracias y segui poniendo mas ejemplos de como hacer foros etc
Aun no me queda claro lo de las sesiones, de hecho llevo rato probando con ellas pero no funciona.
Hola para mi tesis que es el 28 de este mes necesito saber más sobre variables de sesión, es decir, yo las necesito para mantener los datos de un formulario para cuando actualice un campo ddel formulariom no perder los datos de los demás, o si alguien pudiera decirme como actualizar solo un campo de un formulario sin que la página se vuelva a cargar.
Hola,
A ver si lo he entendido bien:
Tienes un formulario con una serie de campos. Este formulario lo envías y se recarga la misma página (se supone) con los datos enviados.
La cuestión es que tú ahora quieres volver a enviar el formulario de nuevo pero modificando alguno de los campos, ¿no? y lo que no quieres es que se te pierdan los valores. ¿Es eso?
Si lo he entendido bien, en realidad no te hace falta usar sesiones. A la hora de recargar la página, en los campos en el valor “value” debes poner lo siguiente:
<input type=”text” name=”var1″ value=”<?echo $_POST["var1"];?>”…
De esta forma, cuando reenvies el formulario, todos los campos tendrán como valor por defecto el valor enviado y si modificas alguno de ellos, como el resto tiene el valor que acabas de enviar, no se pierde ningún valor….
No se si es esto a lo que te referías. Si no es así, comentalo para intentar solucionarlo.
Un saludo.
Buen tema amigo, muy util y entendible.
Aprovecho para hacerte una consulta, he diseñado una web y debe estar en 3 idiomas, el detalle es que no debo crear una pagina por cada idioma si no que esta deber cambiar de idioma cada vez que yo presiona la opcion de idioma.
Se podra adecuar utilizando sesiones?
Gracias por tu respuesta.
Hola David,
Yo mismo tuve que implementar una página web en varios idiomas y, mi solución fue, precisamente, hacer uso de sesiones tal y como has comentado. Debido al interés de tu pregunta he decidido crear un artículo explicando como lo desarrollé ya que considero que es una cuestión más que interesante a la hora de desarrollar aplicaciones web.
El enlace está en: http://codigoaldescubierto.wordpress.com/2008/05/17/paginas-en-varios-idiomas/
Si tienes alguna duda, no dudes en preguntar.
yo no conosco mucho de programar con php y me gustaria saber que es lo que necesito aparte del ya mensionado y como utilizarlo. me parece que una base de datos pero ¿como lo hago? me refiero a la creacion de sesiones
Hola Alberto,
No comprendo muy bien tu pregunta. Tu finalidad es usar sesiones, ¿no? Para ello no requieres del uso de base de datos. Se implementaría como se ha dicho anteriormente. Te resumo:
- En cada página web poner lo de session_start y session_register() de cada variable a almacenar. Así ya se crea la sesión.
- A través del formulario que desees, almacenar los datos que se quieran en las variables ($HTTP_SESSION_VARS['nombre_usuario']=$_POST['nombre_usuario'];, por ejemplo).
Si ya deseas por ejemplo, usar las variables de sesión como identificación de los usuarios si necesitarías una BBDD (o un fichero de texto) para poder comprobar que el usuario ha escrito su clave correctamente.
Me gustaría que comentaras más concretamente a qué te refieres para poder responderte con mayor precisión.
Para poder ver como funciona, te aconsejo, te bajes el ejemplo puesto en las referencias y estudies el código que ahí se expone y poder trastear con él. En muchas ocasiones puede ser muy clarificador.
Un saludo.
los que no entienden están de gusa. Vayanse a entrenar con excel o algo, y luego si vuelven. O pagen profesor bola de inútiles. Se les ayuda gratis y lo único que hacen es quejarse.
la verdad esta muy facil de usar y es justo lo que buscaba para mi aplicación, ojalá encontraramos información igual de util en todas las paginas…
Nesecito hacer una pagina web para mi proyecto de fin de semestre para la universidad en el que haya un apartado especial que solo pueda ver personal autorizado utilizando un Id y una contraseña y como herramienta principal tengo dreamweaver. Y no tengo idea de como programar el sitio para que esto funcione solo que se logra con sesiones utilizando php.
Tengo un problema con mi conexion a la base de datos desde dreamweaver ya que tengo todo listo, mi sitio esta bien creado, pero no me puedo conectar ya que no se detectan las bases de datos y me merca un error no identificado
Me parece un gran aporte, es claro, simple y concreto.
Tal vez mencionar que se puede utilizar ese valor para los query en las siguientes páginas sería un aporte adicional muy bueno.
Por cierto.. si hay que tener conocimiento de lo que se pretende hacer, de otra forma no tiene caso.
Saludos
hola.
es buena la explicasion de las variables en php. pero tengo una duda, ¿ se puede declarar las variables de session como array()?¿ como se declaran?
gracias .
Las variables de session se guardan en ficheros que pueden venir por defectos en una ruta o tu establecerla (session_save_path)
Ahora bien. Si en vez de desconectar que es donde pondrías session_destroy, cierras el navegador, que pasaría con ese fichero que tiene datos guardados. El sistema es capaz borrarlo en un tiempo prudencial? o Se queda indeterminadamente hasta quese borre manualmente?
Saludos y gracias.
17 yiyo
En una variable de sesión puedes meter lo que quieras. Datos simples, arrays, objetos,… He metido cada burrada…
Mi código puede tener fallos, pero básicamente es eso.
muy buena la información publicada
Creo que es la explicación mas sencilla y mejor que vi, y ni hablar del ejemplo, es el unico que me sirvió de todos los que vi. Gracias.
excelente todo, la explicación y los ejemplos llevo rato buscando algo que me aclare y definitivamente esto es lo mejor.
muchas gracias
no me funciona el index que esta en los ejemplos no loguea que pasa?
la verdad muy bueno el articulo felicitaciones!