Professional Documents
Culture Documents
ejecuta. Generalmente este directorio es /tmp pero es posible modificarlo desde el archivo
/etc/php4/apache/php.ini. Estos archivos están vinculados al usuario que navega a través de
un identificador especial llamado "http://mx.php.net/session Session ID". La mayoría de las
veces el usuario no se entera de que está en una sesión al navegar por un sitio en la red.
Las sesiones pueden usarse para muchas cosas pero la gran mayoría 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 contraseña.
¡Basta de teoría! Para empezar a trabajar una sesión en PHP lo primero es iniciarla con la
función http://mx.php.net/manual/es/function.session-start.php session_start() , esta función
debe estar ANTES de cualquier otra cosa. Esto es muy importante, de no colocarla antes
obtendrás 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
##<?php
echo "Pablito clavo un clavito, en la calva de un calvito:<br />";
session_start();
?>
##
##<?php
session_start();
####echo "Pablito clavo un clavito, en la calva de un calvito:<br />"; ####
?>##
Inicio de seesion
<html>
<head>
<title>Autentificación PHP</title>
</head>
<body>
<h1>Autentificación PHP</h1>
<form action="control.php" method="POST">
<table align="center" width="225" cellspacing="2" cellpadding="2"
border="0">
<tr>
<td colspan="2" align="center"
bgcolor=#cccccc>Introduce tu clave de acceso
</td>
</tr>
<tr>
<td align="right">USER:</td>
<td><input type="Text" name="usuario" size="8"
maxlength="50"></td>
</tr>
<tr>
<td align="right">PASSWD:</td>
<td><input type="password" name="contrasena" size="8"
maxlength="50"></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="Submit"
value="ENTRAR"></td>
</tr>
</table>
</form>
<br>
<br>
Datos correctos:
<br>
<br>
User: miguel
<br>
Passwd: qwerty
</body>
</html>
Mas sessions
Las sesiones nos permiten almacenar y consultar información sobre un visitante sin
necesidad de estar enviándola a través de formularios. Usted podría decir "eso ya lo
hago con las cookies", pero el uso de las cookies es cada vez más limitado. Muchos
navegadores las deshabilitan por omisión pues guardan información en la computadora
del usuario y esto las hace inseguras (existen varios programas hackeriles para extraer
contraseñas 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 están vinculados al usuario que navega
a través de un identificador especial llamado "Session ID". La mayoría de las veces el
usuario no se entera de que está en una sesión al navegar por un sitio en la red.
Las sesiones pueden usarse para muchas cosas pero la gran mayoría 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 contraseña.
¡Basta de teoría! Para empezar a trabajar una sesión en PHP lo primero es iniciarla con
la función session_start() , esta función debe estar ANTES de cualquier otra cosa. Esto
es muy importante, de no colocarla antes obtendrás 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
<?php
echo "Pablito clavo un clavito, en la calva de un calvito:<br />";
session_start();
?>
<?php
session_start();
echo "Pablito clavo un clavito, en la calva de un calvito:<br />";
?>
La diferencia entre mandarla antes o después radica en que cualquier petición http es
tomada y negociada de inmediato por el Webserver. Al colocar el inicio de sesión
después de que algo le ha llegado a Apache hace imposible iniciarla pues ya ha habido
un intercambio de información. Incluso una línea vacía después de <?php será
procesada por Apache, y en consecuencia, la sesión no podrá iniciarse.
<?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
// 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:
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']
<?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 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
¡Session rulezzz!
<?php
// Inicio la sesión
session_start();
header("Cache-control: private"); // Arregla IE 6