Foros del Web » Programando para Internet » PHP »

Problema con sesiones, Alluda!

Estas en el tema de Problema con sesiones, Alluda! en el foro de PHP en Foros del Web. Hola gente, espero que anden todos bien! Estoy teniendo un inconveniente con unas sesiones. A la hora de iniciar sesión, que el usuario quede logueado ...
  #1 (permalink)  
Antiguo 03/12/2011, 22:13
Avatar de NnikoO  
Fecha de Ingreso: agosto-2008
Ubicación: Rosario
Mensajes: 245
Antigüedad: 16 años, 4 meses
Puntos: 0
Pregunta Problema con sesiones, Alluda!

Hola gente, espero que anden todos bien! Estoy teniendo un inconveniente con unas sesiones. A la hora de iniciar sesión, que el usuario quede logueado mientras recorre las paginas, y que por decisión propia realice un logout para cerrarla, todo anda de maravillas. El error esta cuando muestro el nombre del usuario logueado, paso a explicar mas detalladamente:

En cada página, tengo un código que comprueba si hay una sesión iniciada, de ser así, arriba a la izquierda se muestra el nombre del usuario, con la opción de salir. Esto se mantiene poco tiempo, luego de recorrer 2 o 3 secciones, el nombre del usuario se reemplaza por la palabra root, como si se perdiera la variable que trae el nombre del usuario logueado. Me gustaria una solucion para eso, que hace rato que vengo probando cosas, y nada surte efecto.
Les dejo los códigos:

Formulario de ingreso, que inicia la sesión:

Código PHP:
<?
if ($_SESSION["validar"] == "autorizado"
{
    
$msjsesion "<span class=valid>Sesi&oacute;n iniciada.</span>";
}
else
{
    if (isset(
$_POST['ingresar']))
      {
        
$user $_POST["user"];
    
        include(
"admin/config.php");
        
        
$link mysql_connect($servidor$usuario$pass);        
            
        
$bd mysql_select_db($basedato$link);
        
        
$sql "SELECT * FROM clientes WHERE mail='" $_POST['user'] . "' 
                        AND pass='" 
$_POST['pass'] . "'"
        
        
$resultado mysql_query($sql$link);
        
      if(
mysql_num_rows($resultado)!=0)
       {
         
session_start();
         
$_SESSION["validar"]= "autorizado";
         
$_SESSION["usuario"] = $user;
         
header ("Location: index.php");
       }
        else 
       {
        
$msjingresar "<span class=error>Los datos ingresados anteriormente son incorrectos.</span>";
        }     
    
       
mysql_free_result($resultado);
       
mysql_close($link);
     }
}
?> 

<div id="identificar">
    <? if(!isset($msjsesion)){ ?> <? echo $msjingresar?>
    <form action="" method="post" name="login">
        <table width="250" border="0" cellpadding="5" style="margin:5px 0 0 0;">
        <tr><td colspan="2"><h1>Identificarme:</h1></td></tr>
            <tr>
                <td><label for="usuario">E-Mail:</label></td> 
                <td><input name="user" type="text" style="width:150px;" value="<? $_POST["user"]; ?>" /></td>
            </tr>
            <tr>
                <td><label for="pass">Contraseña:</label></td>
                <td><input name="pass" type="password" style="width:150px;" value="<? $_POST["pass"]; ?>" /></td>
            </tr>
            <tr>
                <td><input name="ingresar" type="submit" value="Ingresar" /></td>
                <td align="right"><p><a href="registro.php" title="Registrarse">Nueva Cuenta</a></p></td>
            </tr>
        </table>
    </form>
    <? }else
            {        
                echo 
$msjsesion
            } 
    
?>
</div>
Y el código que hay en cada página, que comprueba si hay una sesión iniciada, y muestra el nombre del usuario logueado:
Código PHP:
session_start();
$_SESSION["autorizado"];

if (
$_SESSION["validar"] != "autorizado") {
    
    
$msj "";
}    
else
{
    
$msj "<span class='mail' align='center'>Usuario: " $_SESSION["usuario"] . "</span><br><a href='salir.php' class='enlace_c'>Salir</a>";


Creo que no es algo muy complicado, pero que por ahora pasa la barrera de mis conocimientos lamentablemente, jajajaja. Espero que puedan ayudarme. Muchas gracias de antemano.
Abrazo.


<< niko >>
  #2 (permalink)  
Antiguo 04/12/2011, 00:18
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 4 meses
Puntos: 2237
Respuesta: Problema con sesiones, Alluda!

Has notado si esto te pasa sólo en determinadas páginas o en todas?

Tal vez en alguna parte de tus scripts intentas comparar si el usuario es root para asignarle permisos especiales o mostrar otro tipo de contenido, pero en lugar de comparar estás asignando, ejemplo:

Código PHP:
Ver original
  1. // Comparación correcta:
  2. if($_SESSION['usuario'] == 'root')
  3.  
  4. // Comparación incorrecta, resulta en asignación
  5. if($_SESSION['usuario'] = 'root')

Supongo esto, porque el poco código que proporcionaste parece estar correcto.

Por cierto, es muy importante que después de redirigir con header('Location: ...'); incluyas un exit;, porque header() sólo envía encabezados al navegador sin detener la ejecución del script.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 04/12/2011, 00:46
Avatar de NnikoO  
Fecha de Ingreso: agosto-2008
Ubicación: Rosario
Mensajes: 245
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Problema con sesiones, Alluda!

Muchísimas gracias por responder! Me di cuenta cual era mi error, te comento brevemente, en una de las secciones, hay un sistema de productos, en donde se llama a un código que tiene el usuario y la clave de la base de datos, y justamente, el usuario es = root; entonces cuando pasas por esa sección, el valor de la variable de la sesión se cambia por el valor de la variable de la base! Voy a cambiar el nombre de variable y se arregla. Por dios, siempre renegando con errores tontos! Jajajaja.

Como sería específicamente lo del exit;?
  #4 (permalink)  
Antiguo 04/12/2011, 00:57
Avatar de NnikoO  
Fecha de Ingreso: agosto-2008
Ubicación: Rosario
Mensajes: 245
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Problema con sesiones, Alluda!

Retiro lo que dije! No era la solución :S

Etiquetas: cookies, iniciada, logueado, loguearse, root, sesión
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 03:57.