Manejo de Sesiones en PHP - No perder información
Tutorial creado por Mononeurona. Extraido de: http://www.mononeurona.org/index.php?idp=208
27 de Octubre de 2005
PHP
2 - No perder información
A través de su historia, Microsoft ha producido buenos programas para el mundo, ¡Internet Explorer no es uno de ellos! Uno de sus muchos errores radica en que al llenar un formulario y dar el botón Back, los datos del formario se pierden. Imagínese llenar un largo formulario fiscal y luego de un error al enviarlo, dar Back y ver que toda la información se perdió! Para solucionar este inconveniente es necesario agregar la siguiente línea DESPUÉS de iniciada la sesión:
<?php
session_start();
header("Cache-control: private"); IE 6 Fix.
?>
Bien, veamos un ejemplo de como decirle a PHP que inicie una sesión si el login y el password de un usuario coinciden. Primero crearemos la página acceso.html:
<html>
<head><title>:: Acceso ::</title></head>
<body>
<br />
<div style="text-align:center;"><form method="post" action="valida.php">
Introduzca su login: <input type="text" name="login" /> <br />
Introduzca su contraseña: <input type="password" name="password" /> <br />
<input type="submit" value="Enviar">
</form>
</div>
</body>
</html>
Como puedes ver, no hay nada esotérico en este archivo HTML, solamente lo usaremos para enviar dos valores a la página valida.php. La cual luce así:
<?php
Inicio la sesión
session_start();
header("Cache-control: private"); Arregla IE 6
Voy por el login y el password
$login = $_POST['login'];
$password = $_POST['password'];
reviso si coincide
if ( $login
$_SESSION['estado'] = "logeado" Coloco la variable de sesión 'estado'
$msg = "<a href=\"adentro.php\">Bienvenido " . $login . ">></a>";
} else {
$msg = "Datos erroneos!!. <a href=\"acceso.html\">Inténtelo de nuevo.</a>";
}
?>
<html>
<head><title>:: Valida ::</title></head>
<body>
<p style="text-align:center;"><?= $msg ?></p>
</form>
</body>
</html>
Bien, este script inicia la sesión (las primeras dos líneas), toma las variables que enviamos del formulario:
Voy por el login y el password
$login = $_POST['login'];
Realiza una comparación entre los valores del formulario y dos strings:
if ( $login
Esta linea quiere decir: "si la variable $login es igual a mmontoya y (&&) la variable $password es igual a amex05, haz lo siguiente". Si esta doble condición se cumple se crea la variable de sesión "estado":
$_SESSION['estado'] = "logeado"; Coloco la variable de sesión $_SESSION['estado']
Si la doble condición no se cumple (else), la variable $msg toma un valor diferente:
$msg = "Datos erroneos!!. <a href=\"acceso.html\">Inténtelo de nuevo.</a>";
Destruyendo una sesión
Ahora bien, si la doble condición se cumple, la página valida.php mostrará un link a la página adentro.php que es la siguiente:
<?php
Inicio la sesión
session_start();
header("Cache-control: private"); Arregla IE 6
?>
<html>
<head><title>:: Adentro ::</title></head>
<body>
<p style="text-align:center;">Tu estado de sesión es: <b><?= $_SESSION['estado'] ?></b></p>
</body>
</html>
Esta página simplemente imprime el valor de la variable de sesión $_SESSION['estado']
Esta variable estará siempre a disposición del Webmaster sin necesidad de estar colocándola oculta en un formulario o enviándola en el URL de cada página. Con las sesiones, es muy sencillo comprobar si alguien puede ver una página con acceso restringido en el Website:
<?php
Inicio la sesión
session_start();
header("Cache-control: private"); Arregla IE 6
if ( $_SESSION['estado'] "logeado" ) {
header("Location: acceso.html"); largo de aqui !!
echo "<html></html>";
}
?>
¡Session rulezzz!
Además de mostrar el valor de la sesión, veremos una liga a la página salir.php que es la página que nos "saca" del sitio (logout):
<?php
Inicio la sesión
session_start();
header("Cache-control: private"); Arregla IE 6
descoloco todas la variables de la sesión
session_unset();
Destruyo la sesión
session_destroy();
Y me voy al inicio
header("Location: acceso.html");
echo "<html></html>";
exit;
?>
Esta página borra las variables de sesión con la función session_unset(), destruye la sesión con session_destroy() y envia al usuario a la página de inicio con la función header(), es decir a acceso.html, "sacando" al usuario del sitio. Y voila!! hemos aprendido a manejar sesiones en PHP. En un próximo tutorial veremos como guardar y eliminar una sesión en una base datos (PostgreSQL o MySQL) y no en el directorio /tmp ¿Para que sirve esto?: Para manejar sesiones distribuidas entre varios servidores.
<?php
session_start();
header("Cache-control: private"); IE 6 Fix.
?>
Bien, veamos un ejemplo de como decirle a PHP que inicie una sesión si el login y el password de un usuario coinciden. Primero crearemos la página acceso.html:
<html>
<head><title>:: Acceso ::</title></head>
<body>
<br />
<div style="text-align:center;"><form method="post" action="valida.php">
Introduzca su login: <input type="text" name="login" /> <br />
Introduzca su contraseña: <input type="password" name="password" /> <br />
<input type="submit" value="Enviar">
</form>
</div>
</body>
</html>
Como puedes ver, no hay nada esotérico en este archivo HTML, solamente lo usaremos para enviar dos valores a la página valida.php. La cual luce así:
<?php
Inicio la sesión
session_start();
header("Cache-control: private"); Arregla IE 6
Voy por el login y el password
$login = $_POST['login'];
$password = $_POST['password'];
reviso si coincide
if ( $login
"mmontoya" && $password
"amex05") {$_SESSION['estado'] = "logeado" Coloco la variable de sesión 'estado'
$msg = "<a href=\"adentro.php\">Bienvenido " . $login . ">></a>";
} else {
$msg = "Datos erroneos!!. <a href=\"acceso.html\">Inténtelo de nuevo.</a>";
}
?>
<html>
<head><title>:: Valida ::</title></head>
<body>
<p style="text-align:center;"><?= $msg ?></p>
</form>
</body>
</html>
Bien, este script inicia la sesión (las primeras dos líneas), toma las variables que enviamos del formulario:
Voy por el login y el password
$login = $_POST['login'];
Realiza una comparación entre los valores del formulario y dos strings:
if ( $login
"mmontoya" && $password
"amex05")Esta linea quiere decir: "si la variable $login es igual a mmontoya y (&&) la variable $password es igual a amex05, haz lo siguiente". Si esta doble condición se cumple se crea la variable de sesión "estado":
$_SESSION['estado'] = "logeado"; Coloco la variable de sesión $_SESSION['estado']
Si la doble condición no se cumple (else), la variable $msg toma un valor diferente:
$msg = "Datos erroneos!!. <a href=\"acceso.html\">Inténtelo de nuevo.</a>";
Destruyendo una sesión
Ahora bien, si la doble condición se cumple, la página valida.php mostrará un link a la página adentro.php que es la siguiente:
<?php
Inicio la sesión
session_start();
header("Cache-control: private"); Arregla IE 6
?>
<html>
<head><title>:: Adentro ::</title></head>
<body>
<p style="text-align:center;">Tu estado de sesión es: <b><?= $_SESSION['estado'] ?></b></p>
</body>
</html>
Esta página simplemente imprime el valor de la variable de sesión $_SESSION['estado']
Esta variable estará siempre a disposición del Webmaster sin necesidad de estar colocándola oculta en un formulario o enviándola en el URL de cada página. Con las sesiones, es muy sencillo comprobar si alguien puede ver una página con acceso restringido en el Website:
<?php
Inicio la sesión
session_start();
header("Cache-control: private"); Arregla IE 6
if ( $_SESSION['estado']
"logeado" ) {
echo "<p>Usted está autorizado</p>"; todo esta bien
} else {
header("Location: acceso.html"); largo de aqui !!echo "<html></html>";
}
?>
¡Session rulezzz!
Además de mostrar el valor de la sesión, veremos una liga a la página salir.php que es la página que nos "saca" del sitio (logout):
<?php
Inicio la sesión
session_start();
header("Cache-control: private"); Arregla IE 6
descoloco todas la variables de la sesión
session_unset();
Destruyo la sesión
session_destroy();
Y me voy al inicio
header("Location: acceso.html");
echo "<html></html>";
exit;
?>
Esta página borra las variables de sesión con la función session_unset(), destruye la sesión con session_destroy() y envia al usuario a la página de inicio con la función header(), es decir a acceso.html, "sacando" al usuario del sitio. Y voila!! hemos aprendido a manejar sesiones en PHP. En un próximo tutorial veremos como guardar y eliminar una sesión en una base datos (PostgreSQL o MySQL) y no en el directorio /tmp ¿Para que sirve esto?: Para manejar sesiones distribuidas entre varios servidores.
Valora este capítulo:
Autor y licencia de 'Manejo de Sesiones en PHP - No perder información'
|
Opiniona sobre 'Manejo de Sesiones en PHP - No perder información' (26)
Tu nombre debe tener tres caracteres como mínimo.
Es necesario que te des de alta con una cuenta de correo válida.
Es necesario que te des de alta con una cuenta de correo válida.
El contenido del título de tu opinión debe tener tres caracteres como mínimo.
Es obligatorio que selecciones una valoración del recurso.
El contenido del comentario de tu opinión debe tener tres caracteres como mínimo.
Opina sobre este tutorial |
Wikis relacionados con 'Manejo de Sesiones en PHP - No perder información'
PHP se ha convertido en el lenguaje de facto de Internet y no es difícil...
Más »
PHP es un lenguaje en que usualmente el tipo de dato de una variable no...
Más »
PHP es un lenguaje de programación diseñado específicamente para aplicaciones Web; las características más destacables...
Más »
PHP es un lenguaje de programación diseñado específicamente para aplicaciones Web; las características más destacables...
Más »
Un elemento que usualmente se extraña en el lenguaje JavaScript es la posibilidad de realizar...
Más »

