Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/03/2008, 16:26
Avatar de Ryo
Ryo
 
Fecha de Ingreso: marzo-2008
Ubicación: Bilbao
Mensajes: 269
Antigüedad: 16 años, 1 mes
Puntos: 14
Problema con cookies

Buenas a todos. Acabo de registrarme porque normalmente me limito a buscar problemas similares al que yo tengo, pero este problema me está trayendo de cabeza, así que he decidido crear yo un tema explicando lo que me pasa.

Estoy tratando de que mi página ofrezca la posibilidad de recordar a los usuarios que se identifican en ella, para lo que estoy usando cookies. El caso es que parece que funcione sólo cuando le da la gana. A veces me identifico y al cerrar el navegador (es decir, al terminar la sesión) y al volver a entrar en la página me recuerda, independientemente de que yo elija que me recuerde o no, mientras que otras veces hace justo lo contrario: no importa lo que yo elija, nunca me recuerda. Todo eso sin cambiar el código en lo más mínimo. He visto que los setcookie no estaban arriba del todo (aunque estaban en el head), así que he decidido ponerlo arriba y hasta ahora el resultado es que no me recuerda nunca.

Voy a poner el código que interesa (cualquier parte en la que haga algo con cookies) en orden de ejecución:

1. Crear las cookies si se elige la opción de recordar.
Código PHP:
if (isset($_POST['recordar'])) {
    
setcookie('logueado'$_SESSION['logueado'], time() + 3600*24*100''''0);
    
setcookie('nombreU'$_SESSION['nombreU'], time() + 3600*24*100''''0);

2. Comprobar si el usuario se ha desintificado.
Código PHP:
if (isset($_POST['salir'])) {
    
$_SESSION['logueado']=false;
    unset(
$_COOKIE['logueado']);
    unset(
$_COOKIE['nombreU']);

3. Comprobar si el menú debe mostrar la sección de login o el panel de usuario.
Código PHP:
<?php
if (!$_SESSION['logueado'] && !$_COOKIE['logueado']) {
    include(
"menuder/login.php");
    if (!
$log && isset($_POST['logsend'])) {
    
?>
        <script type="text/javascript">
        falloLogin();
        </script>
    <?php
    
}
}
else {
    include(
"menuder/panel.php");
}
?>
4. Si entra en el panel de usuario, coge los datos de la variable $_COOKIE si ha decidido ser recordado y de $_SESSION si no.
Código PHP:
if ($_COOKIE['logueado']) {
    
$sql="SELECT * FROM usuario WHERE uname='".$_COOKIE['nombreU']."'";
}
else {
    
$sql="SELECT * FROM usuario WHERE uname='".$_SESSION['nombreU']."'";

Por otro lado pongo la función que hace el login, para comprender mejor algunas variables que aparecen arriba.
Código PHP:
function loguear($datosU) {
    
// Conexión con la BD
    
Esto está bienno hace falta que lo ponga :P
    
    
// Se recogen los datos de la BD
    
$sql="SELECT * FROM usuario WHERE uname='".$datosU['nombreU']."'";
    
$res=mysql_query($sql,$link);
    
    
// Se comprueba si el usuario existe
    
if (!($usuario=mysql_fetch_assoc($res))) {
        
$correcto=0;
    }
    else {
        if (
$usuario['pass']==$datosU['contraU']) {
            
$correcto=1;
            
$_SESSION['nombreU']=$usuario['uname'];
            
$_SESSION['logueado']=true;
        }
        else {
            
$correcto=0;
        }
    }

A ver si a alguien me puede decir qué hago mal, porque me estoy volviendo loco

Última edición por Ryo; 03/03/2008 a las 16:36