martes, 15 de diciembre de 2009

Variables de Sesión en PHP para Login

Muy básicamente decir que lo que se suele hacer es trabajar con variables de sesión. Si el logueo es correcto se asigna a cierto una variable de sesión que luego ya utilizarías en todas las páginas que quieras de acceso sólo a admin.

Sería algo así:

login.php:

<?
session_start();

$mi_user="admin";
$mi_pass="pass";
// Si se enviaron datos desde el formulario
if ($_POST['enviar'])
{
   // y coinciden claves
   if ($_POST['usuario']==$mi_user && $_POST['password']==$mi_pass)
   {
      $_SESSION['es_admin']=true;
   }
   else
   {
      $_SESSION['es_admin']=false;
   }
   header("Location: admin.php");
}
else
{?>
<table align="center" width="30%" style="border:2px groove #666666;background:#999999;">
<tr>
<form name="formulario" method="post" action="">
   <td align="center" style="padding:10px">usuario</td>
   <td align="left"><input name="usuario" type="text"></td>
</tr>
<tr>
   <td align="center">contraseña</td>
   <td align="left"><input type="password" name="password"></td>
</tr>
<tr>
   <td align="center" colspan="2">
   <input type="submit" name="enviar" value="enviar">
   </td>
</tr>
</table>
</form>

admin.php(esquema de página tipo admin):

<?
ob_start();
session_start();
if ($_SESSION['es_admin']==true)
{
   echo"aquí va el contenido de admin";
}
else
{
   echo"no estás autorizado a ver esta página";
   // header("location: login.php"); si quieres redirigir en caso de error al login...
   // header("location: otra.php"); si quieres redirigir en caso de error a otra página...
}
?>

La ventaja es que las páginas de tipo 'admin.php' tiene todas el mismo esquema y no necesitas comparar claves, a partir de que el user se loguea consultas la variable de sesión y listo . Y si accede vía url a cualquier página como no ha pasado por el form pués le mandaría a buen sitio (de no ser que se hubiese logueado con anterioridad y no haya transcurrido el tiempo de expiración de sesión en cuyo caso la sesión continuaría y seguiría logueado)
Bueno, esto en plan simple, como comprenderás se puede mejorar pero muxo...

Por ejemplo y para no extenderme demasiado...
Crearte un sistema de registro de usuarios con una tablita de usuarios en la base de datos en la cual tienes un campo de nombre y otro de pass, luego un campo de tipo de usuario, por ejemplo 1-admin 2-usuario normal. Primero leerías que el logueo es correcto, es decir que el usuario y la clave coinciden, en cuyo caso recogerías el tipo de usuario. Crearías la variable de sesión 'es_admin' o 'es_usuario' según el tipo recogido de la db y lo demás sería muy parecido. No sé si me explico. Se trata de basarte en variables de sesión a partir del logueo y mostrar lso contenidos de las páginas evaluando éstas.

2 comentarios: