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" />'.
' '.
'<strong>Contraseña: </strong>'.
'<input type="password" name="pass" maxlength="25" />'.
' '.
'<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;
}
?>
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', $user, time()+7776000);
setcookie('porraF1pass', $pass, time()+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', $user, time()-3600);
setcookie('porraF1pass', $pass, time()-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();
?>
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.