
08/05/2008, 10:54
|
| | Fecha de Ingreso: mayo-2008
Mensajes: 5
Antigüedad: 16 años, 11 meses Puntos: 0 | |
Re: Cookies y MD5 en login Mejor pongo todo el código, para evitar especular y andar adivinando: Archivo config.php con los datos de conexion a la bd.
Código:
<?php
$dbhost='localhost';
$dbusername='root';
$dbuserpass='mipassword';
$dbname='inventario';
mysql_connect ($dbhost, $dbusername, $dbuserpass);
mysql_select_db($dbname) or die('Cannot select database');
session_start();
?>
Archivo creatabla.php para crear los campos necesarios dentro de la bd.
Código:
<?php
include("config.php");
$query = 'CREATE TABLE users(
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
username VARCHAR(30) NOT NULL,
password VARCHAR(20) NOT NULL,
email VARCHAR(40) NOT NULL,
nonce VARCHAR(64) NOT NULL)';
$result = mysql_query($query) or die(mysql_error());
echo "!Tabla creada!";
?>
Archivo registrar.php que incluye el formulario para añadir usuarios a la bd. (Apunta a registro.php, que es quien hace el trabajo).
Código:
<?php
include_once("config.php");
include("function.php");
if(is_login()) {
echo "Conectado";
}else{
?>
<html>
<head>
<title>ALTA DE USUARIO</title>
</head>
<body>
<div style="text-align: center;"><img style="width: 220px; height: 200px;" alt="" src="images/telmex.jpg"><br>
<big><span style="font-weight: bold;">Alta de
usuario en la base de datos<br>
<br clear="all">
</span></big></div>
<table style="width: 100%; text-align: left; margin-left: auto; margin-right: auto;" border="0" cellpadding="2" cellspacing="2">
<tbody>
<tr>
<td>
<div style="text-align: center;">
<form action="registro.php" method="post">
<table style="border: 1px solid rgb(0, 0, 0); text-align: left; margin-left: auto; margin-right: auto;">
<tbody>
<tr>
<td align="right">Nombre de usuario: <input size="15" maxlength="25" name="username" type="text"> </td>
</tr>
<tr>
<td align="right">Password: <input size="15" maxlength="25" name="password" type="password"> </td>
</tr>
<tr>
<td align="right">Repite Password: <input size="15" maxlength="25" name="cpassword" type="password"> </td>
</tr>
<tr>
<td align="right">Email: <input size="15" maxlength="25" name="email" type="text"> </td>
</tr>
<tr>
<td align="center"> <input value="Registrar" type="submit"></td>
</tr>
</tbody>
</table>
</form>
</div>
</td>
</tr>
</tbody>
</table>
<br>
</body>
</html>
<?php
}
?>
Archivo registro.php, que es invocado por el formulario anterior y realiza el alta de usuario en la bd.
Código:
<?php
include("config.php");
if (isset($_POST["username"])) {
$user = stripslashes($_POST["username"]);
$pass = stripslashes($_POST["password"]);
$cpass = stripslashes($_POST["cpassword"]);
$email = stripslashes($_POST["email"]);
if($user==NULL|$pass==NULL|$cpass==NULL|$email==NULL) {
echo "Algún campo está vacio.";
}else{
if($pass!=$cpass) {
echo "Las contraseñas no coinciden";
}else{
$checkuser = mysql_query("SELECT username FROM users WHERE username='$user'");
$username_exist = mysql_num_rows($checkuser);
$checkemail = mysql_query("SELECT email FROM users WHERE email='$email'");
$email_exist = mysql_num_rows($checkemail);
if ($email_exist>0|$username_exist>0) {
echo "EL nombre de usuario o la cuenta de correo estan ya en uso";
}else{
$epass = md5($password);
$nonce = md5(uniqid(rand(), true));
$query = "INSERT INTO users (username, password, email, nonce) VALUES('$user','$epass','$email','$nonce')";
mysql_query($query) or die(mysql_error());
echo "El usuario $user ha sido registrado de manera satisfactoria.";
}
}
}
}
?>
Archivo index.php que consiste en el formulario donde los usuarios van a realizar el login.
Código:
<?php
include_once("config.php");
include("function.php");
if(is_login()) {
echo "Conectado";
}else{
?>
<html>
<head>
<title>Login</title>
</head>
<body>
<div style="text-align: center;"><img style="width: 220px; height: 200px;" alt="" src="images/telmex.jpg"><br>
<big><span style="font-weight: bold;">Identificación requerida</span></big></div>
<table style="width: 100%; text-align: left; margin-left: auto; margin-right: auto;" border="0" cellpadding="2" cellspacing="2">
<tbody>
<tr>
<td><br>
<div style="text-align: center;">
<form action="verifica.php" method="post">
<table style="border: 1px solid rgb(0, 0, 0); text-align: left; margin-left: auto; margin-right: auto;">
<tbody>
<tr>
<td align="right">
Nombre de usuario: <input size="15" maxlength="25" name="username" type="text">
</td>
</tr>
<tr>
<td align="right">
Password: <input size="15" maxlength="25" name="password" type="password">
</td>
</tr>
<tr>
<td align="center">
<input value="Login" type="submit"></td>
</tr>
</tbody>
</table>
</form>
</div>
<div style="text-align: center;"></div>
</td>
</tr>
</tbody>
</table>
<br>
</body>
</html>
<?php
}
?>
Archivo verifica.php, que es quien realiza la verificación con la bd y es invocado por el formulario anterior.
Código:
<?php
include("config.php");
$user=stripslashes($_POST['username']);
$pass=stripslashes($_POST['password']);
$query = mysql_query("SELECT password FROM users WHERE username = '$user' limit 1") or die(mysql_error());
$data = mysql_fetch_array($query);
if($data['password'] == md5($pass)) {
$_SESSION['user'] = $user;
$nonce = md5(uniqid(rand(), true));
setcookie('nonce', $nonce, time() + 7776000, '/');
$query = mysql_query("UPDATE users SET nonce = '$nonce' WHERE username = '$user'");
echo "login ok";
exit();
} else {
echo "fail";
exit();
}
?
Archivo function.php que sirve para verificar si un usuario tiene alguna cookie de sesion en su pc y evitar tener que realizar el login nuevamente.
Código:
<?php
include("config.php");
function is_login() {
// Comprobamos si existe sesión
if(isset($_SESSION['user'])) return true;
//Comprobamos si hay cookie, si está bien y le asignamos una sesión
if(isset($_COOKIE['nonce'])) {
$cookie = mysql_real_escape_string($_COOKIE['nonce']);
$query = mysql_query("SELECT * FROM users WHERE nonce='$cookie'") or die(mysql_error());
$data = mysql_fetch_array($query);
if(isset($data['username'])) {
$_SESSION['user'] = $data['username'];
return true;
}
}
return false;
}
?>
Y esto es todo. Como dije, el registro de usuarios se realiza bien, pero al hacer login con el user y passwd siempre me sale el mensaje de "fail" que se incluye al final del archivo verifica.php. |