Ver Mensaje Individual
  #1 (permalink)  
Antiguo 30/06/2008, 17:30
alvaro_pasto
 
Fecha de Ingreso: febrero-2008
Mensajes: 93
Antigüedad: 16 años, 2 meses
Puntos: 4
Registro usiaros con cookies - opinion

Hola. Llevo un par de semanas aprendiendo PHP, y estoy metido de pleno con los sistemas de registro de usuarios. Ya me voy manejando con las cookies y he "desarrollado" mi primer sistema para loguearse.

El caso es que solo utilizo cookies (ya se que si el cliente las desactiva en su navegador casca) y queria pediros opinion a los que ya tengais experiencia en este campo, sobre la eficiencia del script, y consejos para mejorar el codigo.

Os dejo el codigo del index.php (solo la parte de programacion) y del login.php que es el encargado de procesar el formulario de login.

index.php

Código PHP:
<?php
                    
//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 ($_COOKIE['porraF1user'] && $_COOKIE['porraF1pass']){
                        
$user $_COOKIE['porraF1user'];
                        
$pass $_COOKIE['porraF1pass'];
                        
                        
$conexion mysqli_connect('localhost''usuario''contraseña''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;
                            }
                        }
                        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(
$_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);
                }
                else{
                        
//No existen las cookies, mostramos form de login
                        
echo $formulario;
                }
                
?>
login.php

Código PHP:
<?php
            
//Conectamos con la BDD
            
$conexion mysqli_connect('localhost''usuario''contraseña''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);
                    }
                    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);
                    }
                    
//Mandamos al index
                    
header('location: index.php');
                }
                else{
                    
//Error en la consulta
                
}
            }
            
            
ob_end_flush();
        
?>
En ambos casos utilizo la funcion ob_start() para poder modificar los header en medio del script (en el caso del login.php), o para poder borrar la cookie de error (en el index.php, si no salta error).

Si teneis alguna duda de como funciona el codigo, no dudeis en preguntar.

Saludos y muchas gracias

P.D.: Me falta comprobar en el index.php si se produce error al conectar con la BDD.