PHP - Error en sistema de autentificación

   
Vista:

Error en sistema de autentificación

Publicado por Roberto (1 intervención) el 28/07/2008 22:18:28
Hola, estoy implementando un sistema de autentificación sencillito, en la que en la página principal, se solicita un usuario y password para acceder a la aplicación, y después en otra página llamada "control_acceso.php", coteja los datos introducidos con los que hay guardados en una base de datos, y dependiendo de si se han introducido correctamente, pues entra en la aplicación, o vuelve a la página de principal para pedirte el usuario y contraseña, nada del otro mundo, hasta aquí todo bien, se conecta bien a la B.D., comprueba los datos, y si está bien entra, y si no, pues no. Una vez que entra, porque los datos son correctos, entras a una página con un menú, y a partir de aquí aparece el problema, en que elija la opción que elija del menú, siempre me vuelve a la página inicial, la de autentificación, a cada página que deseo que compruebe la seguridad le pongo, al principio de todo, la siguiente línea: require ("seguridad.php");

En dicho archivo, compruebo si estoy identificado, de la siguiente manera:
<'php
// Inicio la sesión
session_start();
// COMPRUEBO QUE EL USUARIO ESTA AUTENTIFICADO
if ($_SESSION["autentificado"] != "SI")
{
// si no existe, envío a la página de autentificación
header("Location: index.php");
// además salgo del script
exit();
}
?>

Ya que en el fichero que comprueba al principio, cuando introduzco el usuario y password, son correctos,
<?php
ob_start(); // Permite abrir el buffer de salida para poder enviar 'headers'
include_once("conexion.php"); // incluímos la función para la conexión a la B.D.
$link = Conectarse("localhost", "root", "", "ejemplo"); // nos conectamos a la Base de datos
$consulta = "SELECT * FROM usuarios WHERE usuario = '";
$consulta .= $_POST['user'] . "' AND clave = '" . $_POST['passwd'] . "'";
$respuesta = mysql_query($consulta, $link);
if (mysql_num_rows($respuesta) != 0)
{
// usuario y contraseña válidos
// defino una sesión y guardo lso datos
session_start();
$_SESSION["autentificado"] = "SI"; // creo una variable de sesión y le asigno un valor
header("Location: menu.php");
}
else
{
// si no existe, le mando otra vez a la portada
header("Location: index.php?errorusuario=si");
}
mysql_close($link); // cierro la conexión con la base de datos
?>

Además en la página del menú, tengo la siguiente función:
<?php
function salir()
{
session_start(); // Inicio la sesión
// Destruyo la variable de sesión para que no se pueda utilizar más y tengamos que volver a loguearnos
session_destroy();
unset($_SESSION["autentificado"]);
header("Loacation: index.php");
}
?>

Que llamo desde aquí: <a href="<?php salir(); ?>">SALIR</a>

Yo pienso que el fallo tiene que estar en la página del menú, que siempre se ejecuta la función salir().


Un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Error en sistema de autentificación

Publicado por Diego Romero (1450 intervenciones) el 29/07/2008 06:36:40
Efectivamente, siempre se ejecuta la función salir.
Esto:

<a href="<?php salir(); ?>">SALIR</a>

No tiene sentido porque para cuando el usuario carga la página que contiene eso, la función ya se ejecutó en el servidor sin que el usuario haga nada.

Creo que tienes que repensar la lógica de tu sistema de control de sesiones. Para mí ese href debe apuntar a una página de deslogueo que contenga lo que ahora contiene la función salir().

Ah.. y no es "Loacation" es "Location" ;).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar