Anda di halaman 1dari 5

Manejo de Sesiones en PHP

1 - Manejo de Sesiones en PHP


Las sesiones nos permiten almacenar y consultar informacin sobre un
visitante sin necesidad de estar envindola a travs de formularios. Usted
podra decir "eso ya lo hago con las cookies", pero el uso de las cookies es
cada vez ms limitado. Muchos navegadores las deshabilitan por omisin pues
guardan informacin en la computadora del usuario y esto las hace inseguras
(existen varios programas hackeriles para extraer contraseas guardadas en
las cookies). PHP posee un repertorio interesante de funcionalidades que nos
permiten hacer todo lo que hacemos con las cookies sin guardar nada en la
computadora del visitante.
Las sesiones de PHP se guardan en un directorio asignado del servidor donde
Apache se ejecuta. Generalmente este directorio es /tmp pero es posible
modificarlo desde el archivo /etc/php4/apache/php.ini. Estos archivos estn
vinculados al usuario que navega a travs de un identificador especial llamado
"Session ID()". La mayora de las veces el usuario no se entera de que est en
una sesin al navegar por un sitio en la red
Las sesiones pueden usarse para muchas cosas pero la gran mayora de las
veces se usan para establecer los derechos de un usuario en el sitio luego de
logearse con un nombre de usuario y una contrasea.
Basta de teora! Para empezar a trabajar una sesin en PHP lo primero es
iniciarla con la funcin session_start(), esta funcin debe estar ANTES de
cualquier otra cosa. Esto es muy importante, de no colocarla antes obtendrs
mensajes como:
Warning: Cannot send session cookie - headers already sent by
(output started at session_header_error/session_error.php:2) in
session_header_error/session_error.php on line 3
Warning: Cannot send session cache limiter - headers already sent
(output started at session_header_error/session_error.php:2) in
session_header_error/session_error.php on line 3
Este error es producido por el siguiente cdigo:
<?php
echo "Pablito clavo un clavito, en la calva de un calvito:<br />";
session_start();

?>

El error ocurre porque la lnea "Pablito..." se envia antes de la funcin


session_start(). La manera correcta de hacerlo sera as:
<?php
session_start();
echo "Pablito clavo un clavito, en la calva de un calvito:<br />";
?>

La diferencia entre mandarla antes o despus radica en que cualquier peticin


http es tomada y negociada de inmediato por el Webserver. Al colocar el inicio
de sesin despus de que algo le ha llegado a Apache hace imposible iniciarla
pues ya ha habido un intercambio de informacin. Incluso una lnea vaca
despus de <?php ser procesada por Apache, y en consecuencia, la sesin no
podr iniciarse. 2 - No perder informacin
A travs 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 botn Back, los datos del formario se
pierden. Imagnese llenar un largo formulario fiscal y luego de un error al
enviarlo, dar Back y ver que toda la informacin se perdi! Para solucionar este
inconveniente es necesario agregar la siguiente lnea DESPUS de iniciada la
sesin:
<?php
session_start();
header("Cache-control: private"); IE 6 Fix.
?>

Bien, veamos un ejemplo de cmo decirle a PHP que inicie una sesin si el
login y el password de un usuario coinciden. Primero crearemos la pgina
acceso.html:
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 contrasea: <input type="password" name="password" /> <br/>
<input type="submit" value="Enviar">
</form>
</div>

</body>
</html>

Como puedes ver, no hay nada esotrico en este archivo HTML, solamente lo
usaremos para enviar dos valores a la pgina valida.php. La cual luce as:
valida.php
<?php
//Inicio la sesin
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 == phpceps" && $password == clave")
{
$_SESSION['estado'] = "logeado";
// Coloco la variable de sesin 'estado'
$msg = "<a href=\"adentro.php\">Bienvenido ".$login .">></a>";
}
else
{
$msg = "Datos erroneos!!....
<a href=\"acceso.html\">Intntelo de nuevo.</a>";
}
?>

<html>
<head><title>:: Valida ::</title></head>
<body>
<p style="text-align:center;"><?php = $msg ?></p>
</form>
</body>
</html>

Bien, este script inicia la sesin (las primeras dos lneas),


Toma las variables que enviamos del formulario,
Realiza una comparacin entre los valores del formulario y dos strings:
Esta linea quiere decir: "si la variable $login es igual a phpceps y (&&) la
variable $password es igual a clave, haz lo siguiente". Si esta doble condicin
se cumple se crea la variable de sesin "estado":

Si la doble condicin no se cumple (else), la variable $msg toma un valor


diferente
Destruyendo una sesin
Ahora bien, si la doble condicin se cumple, la pgina valida.php mostrar un
link a la pgina adentro.php que es la siguiente:

adentro.php
<?php
//Inicio la sesin
session_start();
header("Cache-control: private"); Arregla IE 6
?>
<html>
<head><title>:: Adentro ::</title></head>
<body>
<p style="text-align:center;">Tu estado de
$_SESSION['estado'] ?></b></p>
</body>
</html>

sesin

es:

<b><?php

Esta pgina simplemente imprime el valor de la variable de sesin


$_SESSION['estado']

Esta variable estar siempre a disposicin del Webmaster sin necesidad de


estar colocndola oculta en un formulario o envindola en el URL de cada
pgina. Con las sesiones, es muy sencillo comprobar si alguien puede ver una
pgina con acceso restringido en el Website:

<?php
//Inicio la sesin
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");
echo "<html></html>";

//largo de aqui !!

}
?>

Session rulezzz!
Adems de mostrar el valor de la sesin, veremos una liga a la pgina salir.php
que es la pgina que nos "saca" del sitio (logout):
<?php
//Inicio la sesin
session_start();
header("Cache-control: private"); Arregla IE 6
//elimino todas la variables de la sesin
session_unset();
// Destruyo la sesin
session_destroy();
// Y me voy al inicio
header("Location: acceso.html");
echo "<html></html>";
exit;
?>

Esta pgina borra las variables de sesin con la funcin


session_unset(), destruye la sesin con session_destroy() y enva al
usuario a la pgina de inicio con la funcin header(), es decir a
acceso.html, "sacando" al usuario del sitio. Y voila!! Hemos aprendido
a manejar sesiones en PHP.

Anda mungkin juga menyukai