Implementé un sistema de login con PHP, MySql y sesiones en mi web. El código lo tomé de una web y le hice algunos cambios y quizá uno de ellos fue el que hizo que ocurra el siguiente problema:
Cuando el usuario desmarca la casilla "Recordarme" del formulario el sistema no lo identifica aunque sus datos sean correctos y tampoco da ningún mensaje de error. Simplemente recarga la web sin crear la sesión ni nada. Si el usuario tiene marcado "Recordarme", todo funciona perfecto.
Este es el código:
Código PHP:
session_name('tzLogin');
// Starting the session
session_set_cookie_params(2*7*24*60*60);
// Making the cookie live for 2 weeks
session_start();
if(isset($_SESSION['id']) && !isset($_COOKIE['tzRemember']) && !isset($_SESSION['rememberMe']))
{
// If you are logged in, but you don't have the tzRemember cookie (browser restart)
// and you have not checked the rememberMe checkbox:
$_SESSION = array();
session_destroy();
// Destroy the session
}
if(isset($_GET['logoff']))
{
$_SESSION = array();
session_destroy();
header("Location: /index.php");
exit;
}
if (isset($_POST['submit'])) {
if ($_POST['submit']=='Login' ){
// Checking whether the Login form has been submitted
$err = array();
// Will hold our errors
if(!$_POST['username'] || !$_POST['password'])
$err[] = 'El nombre de usuario y contraseña no pueden estar vacíos.';
if(!count($err))
{
$_POST['username'] = mysql_real_escape_string($_POST['username']);
$_POST['password'] = mysql_real_escape_string($_POST['password']);
if (isset($_POST['rememberMe'])) {
$_POST['rememberMe'] = (int)$_POST['rememberMe'];
}
// Escaping all input data
$row = mysql_fetch_assoc(mysql_query("SELECT id,nickname, tipo FROM usuarios WHERE nickname='{$_POST['username']}' AND password='".md5($_POST['password'])."'"));
if($row['nickname'])
{
// If everything is OK login
$_SESSION['usr']=$row['nickname'];
$_SESSION['id'] = $row['id'];
$_SESSION['tipo_usuario'] = $row['tipo'];
if (isset($_POST['rememberMe'])) {
$_SESSION['rememberMe'] = $_POST['rememberMe'];
// Store some data in the session
setcookie('tzRemember',$_POST['rememberMe']);
}
}
else $err[]='Nombre de usuario o contraseña incorrectos.';
}
if($err)
$_SESSION['msg']['login-err'] = implode('<br />',$err);
// Save the error messages in the session
header("Location: /index.php");
exit;
}
}
Gracias!