Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/02/2010, 08:59
Tenue
 
Fecha de Ingreso: febrero-2009
Mensajes: 24
Antigüedad: 15 años, 3 meses
Puntos: 0
Definir variable $_SESSION sin valor

Buenos días.

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">&nbsp;<input type="text" name="login"></td>
        </tr>
        <tr>
            <td align="right" height="50">
        <b>
            Clave (*):</b></td>
            <td height="50" width="349">&nbsp;<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 de validar:

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>' ;

}
?>
El problema está en que cuando se loguea, ingresa al área de usuarios normalmente, si se va al índice (en donde está el formulario), automáticamente detecta que existe la sesión y envía al usuario hasta el área de administrador; ahora bien, se la sesión no existe, sale el siguiente error:

Cita:
Notice: Undefined index: autentificado in C:\wamp\www\administrador\index.php on line 3
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.

Disculpen lo extenso. Gracias de antemano.

Estoy utilizando WampServer 2.0, bajo Windows 7.

Saludos!