Ver Mensaje Individual
  #10 (permalink)  
Antiguo 01/07/2008, 04:53
alvaro_pasto
 
Fecha de Ingreso: febrero-2008
Mensajes: 93
Antigüedad: 16 años, 2 meses
Puntos: 4
Respuesta: Registro usiaros con cookies - opinion

Os dejo un chorizo considerable de codigo, que no funciona.

Las ramas del if que funcionan con las cookies activadas funcionan a la perfeccion, pero las que funcionan con la variable $_SESSION, no me pasa los valores de una pagina a otra.

index.php
Código PHP:
<?php
                    
echo "-".$_SESSION['user']."-".$_SESSION['pass']."-";
                    
//Guardamos el formulario de login en una variable
                    
$formulario '<form id="login" action="login.php" method="post">'.
                            
'<strong>Nombre Usuario: </strong>'.
                            
'<input type="text" name="user" maxlength="15" />'.
                            
'&nbsp;&nbsp;&nbsp;'.
                            
'<strong>Contraseña: </strong>'.
                            
'<input type="password" name="pass" maxlength="25" />'.
                            
'&nbsp;&nbsp;'.
                            
'<input type="submit" value="Enviar"/>'.
                        
'</form>';
                    
//Si existen cookies, guardamos su contenido
                    
if (isset($_COOKIE['porraF1user']) && isset($_COOKIE['porraF1pass'])){
                        
$user $_COOKIE['porraF1user'];
                        
$pass $_COOKIE['porraF1pass'];
                        
                        
$conexion mysqli_connect('localhost''user''pass''BDD');
                        
$consulta mysqli_query($conexion"SELECT Password FROM t_usuarios WHERE Nick='$user'");
                        
                        if (
$consulta){
                            
$resultado mysqli_fetch_assoc($consulta);
                            if (
$resultado['Password'] == $pass){
                                echo 
"Bienvenido <strong>$user</strong>";
                                
$_SESSION['user'] = $user;
                                
$_SESSION['pass'] = $pass;
                            }
                            else{
                                
//El usuario y la contraseña no se corresponden. Mandar mensaje de error y mostrar form de login
                                
echo '<pre class="error">Usuario y/o contraseña incorrectos</pre>';
                                echo 
$formulario;
                                
//Borramos las cookies incorrectas
                                
setcookie('porraF1user''error'time()-3600);
                                
setcookie('porraF1pass''error'time()-3600);
                            }
                        }
                        else{
                            
//Error en la conexion
                            //La consulta fallo. Mostramos pantalla de error y mandamos al index despues de unos segundos
                            
echo '<pre class="error">Error en la conexion con la Base de Datos</pre>';
                        }
                }
                elseif(isset(
$_SESSION['user']) && isset($_SESSION['pass'])){
                    
//Aqui va el caso de que la sesion este iniciada y no tengamos cookies
                    
$user $_SESSION['user'];
                    
$pass $_SESSION['pass'];
                    
                    
$conexion mysqli_connect('localhost''user''pass''BDD');
                    
$consulta mysqli_query($conexion"SELECT Password FROM t_usuarios WHERE Nick='$user'");
                    
                    if (
$consulta){
                        
$resultado mysqli_fetch_assoc($consulta);
                        if (
$resultado['Password'] == $pass){
                            echo 
"Bienvenido <strong>$user</strong>";
                        }
                        else{
                            
//El usuario y la contraseña no se corresponden. Mandar mensaje de error y mostrar form de login
                            
echo '<pre class="error">Usuario y/o contraseña incorrectos</pre>';
                            echo 
$formulario;
                            
//Borramos las cookies incorrectas
                            
setcookie('porraF1user''error'time()-3600);
                            
setcookie('porraF1pass''error'time()-3600);
                            
//Y borramos la de error para proximas cargas
                            
setcookie('porraF1error''error'time()-3600);
                        }
                    }
                }
                elseif(isset(
$_COOKIE['porraF1error'])){
                    echo 
'<pre class="error">Usuario y/o contraseña incorrectos</pre>';
                    echo 
$formulario;
                    
//Borramos la cookie de error para futuras cargas de la pagina
                    
setcookie('porraF1error''error'time()-3600);
                    
//Tambien borramos posibles cookies de usuari y pass
                    
setcookie('porraF1user''error'time()-3600);
                    
setcookie('porraF1pass''error'time()-3600);
                    
//Destruimos la sesion
                    
session_destroy();
                }
                elseif(isset(
$_SESSION['error'])){
                    
//El usuario y la contraseña no se corresponden. Mandar mensaje de error y mostrar form de login
                    
echo '<pre class="error">Usuario y/o contraseña incorrectos</pre>';
                    echo 
$formulario;
                    
//Borramos las cookies incorrectas
                    
setcookie('porraF1user''error'time()-3600);
                    
setcookie('porraF1pass''error'time()-3600);
                    
//Borramos la cookie de error para futuras cargas de la pagina
                    
setcookie('porraF1error''error'time()-3600);
                    
//Destruimos la sesion
                    
session_destroy();
                }
                else{
                        
//No existen las cookies ni sesion, mostramos form de login
                        
echo $formulario;
                }
                
?>

login.php

Código PHP:
<?php
            
//Conectamos con la BDD
            
$conexion mysqli_connect('localhost''user''pass''BDD');
            
            if (!
$conexion){
                
//Error en la conexion
            
}
            else{
                
//Guardamos los valores del formulario
                
$user $_POST['user'];
                
$pass $_POST['pass'];
                
                
$consulta mysqli_query($conexion"SELECT Password FROM t_usuarios WHERE Nick='$user'");
                
//Guardamos los datos en la BDD
                
if ($consulta){
                    
$resultado mysqli_fetch_assoc($consulta);
                    
                    if (
$resultado['Password'] == $pass){
                        
//Creamos una cookie con 90 dias de duracion
                        
setcookie('porraF1user'$usertime()+7776000);
                        
setcookie('porraF1pass'$passtime()+7776000);
                        
//Y borramos la de error en caso de existir
                        
setcookie('porraF1error''error'time()-3600);
                        
//Y además creamos variables de sesion por si el usuario tiene las cookies desactivadas
                        
$_SESSION['user'] = $user;
                        
$_SESSION['pass'] = $pass;
                    }
                    else{
                        
//El usuario y la contraseña no se corresponden. Destruimos las cookies
                        
setcookie('porraF1user'$usertime()-3600);
                        
setcookie('porraF1pass'$passtime()-3600);
                        
//Y creamos otra para mostrar mensaje de error
                        
setcookie('porraF1error''error'time()+180);
                        
//Creamos tambien una variable de error de sesion
                        
$_SESSION['error'] = 'error';
                    }
                    
//Mandamos al index
                    
header('location: index.php');
                }
                else{
                    
//Error en la consulta
                
}
            }
            
            
ob_end_flush();
        
?>
En ambos casos, en las primeras lineas, antes del doctype pongo esto:
Código PHP:
<?php
    
//Abrimos el buffer
    
ob_start();
    
//Iniciamos sesion
    
session_start();
?>
Cuando envio el formulario, llamo al login, que despues de crear las cookies y guradar las variables de sesion, vuelve al index, el cual segun si existen cookies (estan activadas) o no (no lo estan) trata de una manera y otra la sesion.

El problema es que los valores de sesion que asigno en login.php no los puedo recuperar en index.php, porque es otra sesion diferente. Con otras pruebas que hice con paginas sencillas no se me presentaba este error.

Alguna sugerencia?

Muchas gracias