Tengo la siguiente estructura para un sistema de autentificación de usuarios en PHP con MySQL. El usuario inserta sus datos de usuario y contraseña, con método POST se va al código de validar.php, en donde creo una sesión con nombre identificado en donde le digo que sí está identificado. En todas las páginas que quiero que el acceso sea restringido, incluyo el código que valida esto. Si no está logueado, envía a la página principal en donde debe loguearse.
El problema está en que si el usuario ya está logueado, cuando se va (manualmente, por el enlace del logo situado en el header) al índice de administrador, sale igualmente el formulario para ingresar el usuario y contraseña. No quiero que salga ésto, sino que detecte que ya hay una sesión activa, y debería enviar al área del usuario.
Los códigos son los siguientes:
Código del formulario de login:
Código PHP:
<?php
// esta parte del código es para validar que la sesión está iniciada
session_start();
if ($_SESSION["autentificado"] != "SI")
{
}
else
{
header("Location: http://localhost/administrador/bienvenido.php");
}
?>
<form action="http://localhost/administrador/validar.php" method="POST">
<p style="text-align: center">Por favor, ingrese sus datos de acceso:<br>
(Los datos con el asterisco (*) son obligatorios)</p>
<div align="center">
<table border="0" style="border-collapse: collapse" width="63%" bordercolor="#274B18">
<tr>
<td align="right" height="50">
<b>
Cédula (*):</b></td>
<td height="50" width="349"> <input type="text" name="login"></td>
</tr>
<tr>
<td align="right" height="50">
<b>
Clave (*):</b></td>
<td height="50" width="349"> <input type="password" name="password"></td>
</tr>
</table>
</div>
</div>
<div align="center">
<hr width="1%" size="1" color="#FFFFFF"></div>
<div align="center">
<input type="submit" value="Ingresar"> <input type="reset" value="Limpiar campos"></form>
Código PHP:
<?php
$link = mysql_connect("localhost", "root") or die ("Error en la Base de Datos");
$bd=mysql_select_db("sedematdb",$link) or die ("Verifique la Base de Datos");
$login=$_POST["login"];
$password=$_POST["password"];
if($login!="" and $password!="" and is_numeric($login))
{
$password=crypt($password, "semilla");
$query=mysql_query("SELECT login,password,nombre,apellido,correo FROM `usuarios` WHERE login='$login' && password='$password' ",$link);
if(mysql_num_rows($query)>0)
{
session_start();
$_SESSION["autentificado"]= "SI";
header('Location: http://localhost/administrador/bienvenido.php');
}
else
{
echo '<p align="center"><b>Ha sucedido el siguiente error:</b></p>' ;
echo '<p align="center">Usuario y/o contraseña incorrecta.</p>';
echo '<p align="center"><a href="http://localhost/administrador/">Intentar de nuevo</a> | <a href="http://localhost/">Volver a la Página principal</a></p><p></p>' ;
}
}
else
{
echo '<p align="center"><b>Ha sucedido el siguiente error:</b></p>' ;
echo '<p align="center">Debes ingresar todos los datos. Recuerda que el usuario es tu número de cédula.</p>';
echo '<p align="center"><a href="http://localhost/administrador/">Intentar de nuevo</a> | <a href="http://localhost/">Volver a la Página principal</a></p><p></p>' ;
}
?>
Cita:
Me dice que la variable o el índice de la sesión no se ha definido. No sé qué hacer, ya lo he intentado todo... hasta donde dan mis conocimientos. ¿Qué puedo hacer? Por eso mi título es "Definir variable $_SESSION sin valor", porque si defino de la siguiente manera: $_SESSION["autentificado"]="cualquiervalor";, antes del IF, ya dicho identificador de sesión tiene un valor y me va a dar problemas con el condicional.Notice: Undefined index: autentificado in C:\wamp\www\administrador\index.php on line 3
Disculpen lo extenso. Gracias de antemano.
Estoy utilizando WampServer 2.0, bajo Windows 7.
Saludos!