Recordar usuario y contraseña PHP – Cookies

cookies phpHay una opción en todos los formularios de acceso a nuestras cuentas de correo, foros, blogs, etc. muy famosa por la función que ofrece. Recordar usuario y contraseña en este ordenador es algo que mucha gente utiliza para evitar tener que introducir sus credenciales siempre que acceda a una página web desde su ordenador.

Si bien puede ser un problema importante de seguridad ante una pérdida o robo del equipo, en todos los formularios de acceso podremos ver dicha función.

¿Qué es una Cookie?

Para que la página web reconozca siempre nuestro usuario y contraseña en un sitio web, usa las cookies. Para quien no lo sepa, las cookies son archivos creados por las páginas web en los que almacena determinada información del visitante, ya sean preferencias o información de su perfil.

Dentro de la denominación de cookie podemos categorizarlas en:

  • Cookie de origen: se crean por el dominio del sitio que estamos visitando.
  • Cookie de terceros: aunque visitemos un sitio web otros dominios que aparecen en ella pueden crear cookies (por ejemplo los anuncios).

Creando un sistema de cookies

Para crear un sistema que reconozca al usuario incluso al cerrar el navegador y volver a abrirlo vamos a usar un fichero con el formulario y la comprobación de cookies, y otro de autenticación.

En este ejercicio, para hacerlo más sencillo y claro, no me voy a centrar ni en la creación de la sesión de usuario ni en la securización de la identificación.

Antes de nada vamos a crearnos una base de datos con una tabla de usuarios.

CREATE TABLE IF NOT EXISTS `users` (
  `id_user` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(30) COLLATE utf8_bin NOT NULL,
  `password` varchar(30) COLLATE utf8_bin NOT NULL,
  `cookie` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  PRIMARY KEY (`id_user`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=2 ;

La tabla a parte de los datos básicos del usuario llevará un campo llamado cookie donde almacenaremos un valor aleatorio para comprobar la cookie del usuario.

En el fichero index.php, en el formulario pondremos los campos de usuario, contraseña y también el check de recordar contraseña.

<form action="auth.php" method="post">
		<table>
			<tr>
				<td>Usuario:</td><td><input type="text" name="username"></td>
			</tr>
			<tr>
				<td>Contrase&ntilde;a:</td><td><input type="text" name="password"></td>
			</tr>
			<tr>
				<td colspan="2"><input type="checkbox" name="recordar"> Recordar contrase&ntilde;a</td>
			</tr>
			<tr>
				<td colspan="2"><input type="submit" value="Entrar"></td>
			</tr>
		</table>
	</form>

En el fichero auth.php vamos a realizar la comprobación del usuario y contraseña, a su vez, haremos una comprobación del check de recordar contraseña, y si ha marcado la casilla, crearemos la cookie en el ordenador del visitante por validez de un año.

 
$sql = mysql_query("SELECT * FROM users 
					WHERE username='".$_POST["username"]."' 
					AND password='".$_POST["password"]."';");
 
if(mysql_num_rows($sql)==1){
	$row = mysql_fetch_array($sql);
	$user = $row["username"];
	if(isset($_POST['recordar'])){
		if($_POST['recordar'] == true){
			mt_srand(time());
			$rand = mt_rand(1000000,9999999);
			mysql_query("UPDATE users 
							SET cookie='".$rand."' 
							WHERE id_user=".$row["id_user"]) or die(mysql_error());
			setcookie("id_user", $row["id_user"], time()+(60*60*24*365));
			setcookie("marca", $rand, time()+(60*60*24*365));
		}
	}
	echo "Identificado correctamente.";
}
else{
	echo "Identificaci&oacute;n incorrecta.";
}

Posteriormente, en el archivo index.php hacemos una comprobación de nuestra cookie en el ordenador del visitante, y si la encuentra, la compara con el usuario de nuestra base de datos, y con el número aleatorio que tiene asignado.

if(isset($_COOKIE['id_user']) && isset($_COOKIE['marca'])){
	if($_COOKIE['id_user']!="" || $_COOKIE['marca']!=""){
		$sql_c = mysql_query("SELECT * FROM users 
					WHERE id_user='".$_COOKIE["id_user"]."' 
					AND cookie='".$_COOKIE["marca"]."'
					AND cookie<>'';");
	}
	if(mysql_num_rows($sql_c)){
		$row_c = mysql_fetch_array($sql_c);
		echo "El usuario ".$row_c['username']." se ha identificado correctamente.";
		$user_cookie = mysql_fetch_array($sql_c);
	}
}

Ahora si entramos con el usuario que tenemos en nuestra base de datos y recordamos la contraseña, al cerrar el navegador y volver a entrar en la página nos reconocerá automáticamente.

El código del ejercicio completo sería el siguiente.

index.php

<?php
mysql_connect("localhost","root","");
mysql_select_db("cookies");
 
if(isset($_COOKIE['id_user']) && isset($_COOKIE['marca'])){
	if($_COOKIE['id_user']!="" || $_COOKIE['marca']!=""){
		$sql_c = mysql_query("SELECT * FROM users 
					WHERE id_user='".$_COOKIE["id_user"]."' 
					AND cookie='".$_COOKIE["marca"]."'
					AND cookie<>'';");
	}
	if(mysql_num_rows($sql_c)){
		$row_c = mysql_fetch_array($sql_c);
		echo "El usuario ".$row_c['username']." se ha identificado correctamente.";
		$user_cookie = mysql_fetch_array($sql_c);
	}
}
else{
?>
<html>
<head>
 
</head>
<body>
	<form action="auth.php" method="post">
		<table>
			<tr>
				<td>Usuario:</td><td><input type="text" name="username"></td>
			</tr>
			<tr>
				<td>Contrase&ntilde;a:</td><td><input type="text" name="password"></td>
			</tr>
			<tr>
				<td colspan="2"><input type="checkbox" name="recordar"> Recordar contrase&ntilde;a</td>
			</tr>
			<tr>
				<td colspan="2"><input type="submit" value="Entrar"></td>
			</tr>
		</table>
	</form>
</body>
</html>
<?php
}
?>

auth.php

<?php
mysql_connect("localhost","root","");
mysql_select_db("cookies");
 
 
$sql = mysql_query("SELECT * FROM users 
					WHERE username='".$_POST["username"]."' 
					AND password='".$_POST["password"]."';");
 
if(mysql_num_rows($sql)==1){
	$row = mysql_fetch_array($sql);
	$user = $row["username"];
	if(isset($_POST['recordar'])){
		if($_POST['recordar'] == true){
			mt_srand(time());
			$rand = mt_rand(1000000,9999999);
			mysql_query("UPDATE users 
							SET cookie='".$rand."' 
							WHERE id_user=".$row["id_user"]) or die(mysql_error());
			setcookie("id_user", $row["id_user"], time()+(60*60*24*365));
			setcookie("marca", $rand, time()+(60*60*24*365));
		}
	}
	echo "Identificado correctamente.";
}
else{
	echo "Identificaci&oacute;n incorrecta.";
}
?>

Podéis descargar también el código en un fichero.

¿Te ha gustado? Compártelo y Comenta! Puedes darme tu opinión o consultar tus dudas, de esta forma mantendremos la blogosfera viva.

    6 Commentsto Recordar usuario y contraseña PHP – Cookies

    1. Información Bitacoras.com…

      Valora en Bitacoras.com: Hay una opción en todos los formularios de acceso a nuestras cuentas de correo, foros, blogs, etc. muy famosa por la función que ofrece. Recordar usuario y contraseña en este ordenador es algo que mucha gente utiliza para ……

    2. Alvaro dice:

      Muchas gracias por esta explicacion la verdad he estado tratando de resolver algunos problemas con esto de las cookies y aunque no he probado tu ejemplo, por encima me doy cuenta de que funciona perfectamente… Muchas gracias de nuevo

    3. Alf dice:

      Esto tiene un problema. Digamos que hago logon en el pc de mi casa y marco la casilla de “recordarme”. Se escribe en la BD una marca aleatoria y todo correcto. Luego voy a mi trabajo y me conecto nuevamente a la página, desde mi pc de la oficina y marco la casilla “recordarme”. Acabo de sobreescribir la marca aleatoria en la base de datos, con lo que cuando vuelva a mi casa, la opción de recordarme no funcionada.

      Saludos

      • Javier dice:

        Tampoco funcionará el inicio de sesión si no se marca “Recordarme”. Pues no está utilizando ningún sistema de almacenaje de datos temporal como podría ser $_SESSION

    4. Paco dice:

      Amigo y como se borarria la cookie por ejemplo para hacer el logout.php

    Deja un comentario

    Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *


    *

    © 2017 Soy Autodidacta | Design Theme by: D5 Creation | Powered by: WordPress