Foros del Web » Programando para Internet » PHP »

Definir variable $_SESSION sin valor

Estas en el tema de Definir variable $_SESSION sin valor en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 22/02/2010, 08:59
 
Fecha de Ingreso: febrero-2009
Mensajes: 24
Antigüedad: 15 años, 2 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!
  #2 (permalink)  
Antiguo 22/02/2010, 09:01
Avatar de hector2c  
Fecha de Ingreso: noviembre-2007
Ubicación: Perú - Tacna
Mensajes: 979
Antigüedad: 16 años, 4 meses
Puntos: 25
Pregunta Respuesta: Definir variable $_SESSION sin valor

mmmmmmmm, puedes hacer una condición empty:
Código PHP:
if(empty($_SESSION["autentificado"])){
  echo 
"la sesion con nombre autentificado esta vacia";
}else{
  echo 
"la sesion con nombre autentificado TIENE UN VALOR!!!";

empty te indica si alguna variable no esta definida... es lo contrario de isset
__________________
blog: hector2c.wordpress.com
email: [email protected]
  #3 (permalink)  
Antiguo 22/02/2010, 09:16
 
Fecha de Ingreso: febrero-2009
Mensajes: 24
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Definir variable $_SESSION sin valor

Muchísimas gracias, ya ha funcionado.

Tengo otra inquietud. En muchas ocasiones el servidor "colapsa", me explico, no termina de cargar la página de validar.php cuando se está intentando loguear desde el formulario de login. Se queda en "Esperando a localhost" Al principio pensaba que era por el antivirus (NOD32), no desinstalé y funcionó perfectamente. Pero en varias ocasiones, sucede esto.

Los casos en los que sucede es el siguiente:

1. Cierro el navegador y lo abro nuevamente, e intento loguearme. Cuando se cierra el navegador, la sesión se termina, y se pone extremdadamente lento.
2. Cuando elimino manualmente las cookies de localhost.

No sé si sea mi WampServer. No tengo firewall activado. ¿Qué puede ser?

Última edición por Tenue; 22/02/2010 a las 09:28
  #4 (permalink)  
Antiguo 22/02/2010, 09:28
Avatar de hector2c  
Fecha de Ingreso: noviembre-2007
Ubicación: Perú - Tacna
Mensajes: 979
Antigüedad: 16 años, 4 meses
Puntos: 25
Respuesta: Definir variable $_SESSION sin valor

cuando dices el servidor, te refieres a un hosting o estas trabajando localmente???
__________________
blog: hector2c.wordpress.com
email: [email protected]
  #5 (permalink)  
Antiguo 22/02/2010, 09:31
 
Fecha de Ingreso: febrero-2009
Mensajes: 24
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Definir variable $_SESSION sin valor

Estoy trabajando localmente con WampServer... El problema persiste, hasta que elimino las cookies, o reinicio el servidor WampServer, o elimino todos los historiales. Me pasa con Firefox, Internet Explorer y Google Chrome.
  #6 (permalink)  
Antiguo 22/02/2010, 09:35
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 14 años, 5 meses
Puntos: 65
Respuesta: Definir variable $_SESSION sin valor

Para que tenes asi esta linea?

Código HTML:
Ver original
  1. <form action="http://localhost/administrador/validar.php" method="POST">

Si con esto alcanzaria:

Código HTML:
Ver original
  1. <form action="validar.php" method="post">

No se si sera ese tu problema, el codigo aparentemente no tiene ningun drama...
__________________
HV Studio
Diseño y desarrollo web
  #7 (permalink)  
Antiguo 22/02/2010, 09:46
 
Fecha de Ingreso: febrero-2009
Mensajes: 24
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Definir variable $_SESSION sin valor

Gracias por tu respuesta, jackson666, realmente lo tengo así porque muchas veces con el include sin hacer referencia a la ruta exacta, me daba problemas. A la final la aplicación está trabajando excelentemente bien, sin problema alguno, sólo ese detalle. Se congela de repente, queda en "Cargando...". Puedo asumir que es por el servidor.

En todos lados de mi código hago referencia exacta a la ruta de lo que utilizo, por ejemplo en los include, coloco todo: http://localhost..., para los enlaces también. ¿Qué puedo hacer? Me ha pasado en mi Windows 7, y en Windows XP tamibén.

Saludos.
  #8 (permalink)  
Antiguo 22/02/2010, 09:51
Avatar de hector2c  
Fecha de Ingreso: noviembre-2007
Ubicación: Perú - Tacna
Mensajes: 979
Antigüedad: 16 años, 4 meses
Puntos: 25
Respuesta: Definir variable $_SESSION sin valor

Tenue, ese problema de lentitud te pasa en alguna página .php específica??? o siempre que trabajas con coockies???

aproposito, mmm, recuerda que cuando saque en producción tu aplicación deberas modificar tooodos los enlaces que agregaste el "http://localhost...", seria bueno que uses los "../" "../../", etc...

espero tu respuesta, nus vemos!
__________________
blog: hector2c.wordpress.com
email: [email protected]
  #9 (permalink)  
Antiguo 22/02/2010, 10:21
 
Fecha de Ingreso: febrero-2009
Mensajes: 24
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Definir variable $_SESSION sin valor

Ese problema me pasa cuando quiero loguearme en index.php (el código está abajo), el cual llama al validar.php. Específicamente cuando los datos son correctos (porque tengo dos validaciones: una que valida si ha ingresado los datos en los dos input text, otro que valida si el usuario y contraseña son correctos, y el otro en donde todo está bien; ingresó los dos datos y sí existe en la base de datos).

Código del index.php:

Cita:
<?php
session_start();
if(empty($_SESSION["autentificado"])){
}else{
header("Location: bienvenido.php");
}
?>

<html>

<head>
<title>SAGEPAC - Sistema automatizado para la Gestión de Pagos de Contribuyentes</title>
<link rel="stylesheet" type="text/css" href="estilo.css" />
</head>

<body>
<div align="center">
<table border="0" width="1024" cellspacing="0" cellpadding="0">
<tr>

<?php include ("inc/arriba.php");?>

</tr>
<tr>
<td background="images/cuerpo.png" valign="top">
<div align="center">
<table border="0" width="967">
<tr>
<td valign="top">
<div align="center">
<table border="0" width="989" style="border-collapse: collapse" bordercolor="#669900">
<tr>
<td valign="top" width="100%">
<form action="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>
</td>
</tr>
</table>
</div>
</td>
</tr>
</table>
</div>
</td>
</tr>
<tr>
<?php include ("inc/abajo.php");?>
</tr>
</table>
</div>

</body>

</html>
Código del validar.php:

Cita:
<html>

<head>
<title>SAGEPAC - Sistema automatizado para la Gestión de Pagos de Contribuyentes</title>
<link rel="stylesheet" type="text/css" href="estilo.css" />
</head>

<body>
<div align="center">
<table border="0" width="1024" cellspacing="0" cellpadding="0">
<tr>

<?php include ("inc/arriba.php");?>

</tr>
<tr>
<td background="images/cuerpo.png" valign="top">
<div align="center">
<table border="0" width="967">
<tr>
<td valign="top">
<div align="center">
<table border="0" width="989" style="border-collapse: collapse" bordercolor="#669900">
<tr>
<td valign="top" width="100%">
<p>&nbsp;</p>
<p>&nbsp;</p>
<p align="center"><?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: 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="/administrador/">Intentar de nuevo</a> | <a href="../">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="/administrador/">Intentar de nuevo</a> | <a href="../">Volver a la Página principal</a></p><p></p>' ;

}
?></p>
<p align="center">&nbsp;</p>
</form>
</td>
</tr>
</table>
</div>
</td>
</tr>
</table>
</div>
</td>
</tr>
<tr>
<?php include ("inc/abajo.php");?>
</tr>
</table>
</div>

</body>

</html>
Ya he cambiado todas las referencias a como me has indicado, lo hacía con http... porque me daba problemas. Aparentemente está trabajando bien. ¿Qué puedo hacer?

Saludos, y gracias.
  #10 (permalink)  
Antiguo 22/02/2010, 10:34
Avatar de hector2c  
Fecha de Ingreso: noviembre-2007
Ubicación: Perú - Tacna
Mensajes: 979
Antigüedad: 16 años, 4 meses
Puntos: 25
Respuesta: Definir variable $_SESSION sin valor

hola Tenue, mira mira, encontre varios puntos con problemas similares al tuyo, aqui va uno y otro, el primero tiene solución, tal vez es lo que pase... activa el display_errors y chekea tu error.log en la carpeta apache/logs... espero tu respuesta...

a proposito, que version php apache y mysql lleva???
__________________
blog: hector2c.wordpress.com
email: [email protected]
  #11 (permalink)  
Antiguo 22/02/2010, 13:33
 
Fecha de Ingreso: febrero-2009
Mensajes: 24
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Definir variable $_SESSION sin valor

hector2c, no sé si me recomiendas subir la aplicación PHP a mi servidor web, a ver si en el servidor como tal no da problemas... ¿Qué dices? La versión de PHP es 5.3.0, Apache 2.2.11 y la de MySQL es 5.1.36. Sé que las versiones están un poco desactualizadas... ¿qué hago?

Saludos.

PD.- En el log de error no hay ningún error que tenga que ver con el archivo validar.php, ni con index.php. No sé qué hacer...
  #12 (permalink)  
Antiguo 22/02/2010, 13:38
Avatar de hector2c  
Fecha de Ingreso: noviembre-2007
Ubicación: Perú - Tacna
Mensajes: 979
Antigüedad: 16 años, 4 meses
Puntos: 25
Respuesta: Definir variable $_SESSION sin valor

mmmmmmm, intenta usar php 5.2.12, no tengo problemas, mmm, en php 5.3 hay varias actualizaciones que no me han agradado .___.
__________________
blog: hector2c.wordpress.com
email: [email protected]

Etiquetas: definir, session, variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:06.