Login con PHP y Ajax

bLero

Hola chicos, me estoy adentrando un poco en el tema de Ajax y me he estancado un poco.

He cambiado mi sistema de login tradicional en php por otro que combine Ajax para que me muestre en un div posibles errores, mensajes, etc.

He modificado por tanto el submit de mi formulario de login que antes apuntaba a "validate_user.php" por una funcion javascript que luego internamente llama a ese php y según lo que devuelva podré mostrar "Login correcto" o "Login Incorrecto" en mi div.

El problema es que si el login es correcto, necesito recargar la página para que me desaparezca el formulario de login, y con window.location.reload() no se recarga completamente por lo que no desaparece.

os dejo el código de los ficheros implicados:

validate_user.php

<?php
$usuario="usuario";
$password="pass";
if(isset($_GET['user']) && isset($_GET['pw'])){
$user = $_GET['user'];
$pw = $_GET['pw'];
if(($user == $usuario) && ($pw == $password)){
$_SESSION['sesionuser']=$user;
echo 'Login correcto';
}
else{
echo '0';
}
}
else{
echo '0';
}
?>

login.php Este login va incrustado en un div en el index.php

<?php
if(!isset($_SESSION['sesionuser'])){
echo '<form action="javascript:login();" method="post">
<fieldset>
<input type="text" name="user" id="user" value="Usuario" class="textfield" size="12" onfocus="this.value=\'\'" onblur="if(this.value==\'\'){this.value=\'Usuario\'}"></input>
<input type="password" name="pw" id="pw" value="Contraseña" class="textfield" size="12" onfocus="this.value=\'\'" onblur="if(this.value==\'\'){this.value=\'Contraseña\'}"></input>
<input type="submit" value="OK" class="button"></input>
</fieldset>
</form>';
}
else{
	echo 'Bienvenido '.$_SESSION['sesionuser'].', <a class="button" href="index.php?site=close_session">Salir</a>';
}
?>

ajax.js

/* ---------------------------- */
/* XMLHTTPRequest Enable */
/* ---------------------------- */
function createObject() {
var request_type;
var browser = navigator.appName;
if(browser == "Microsoft Internet Explorer"){
request_type = new ActiveXObject("Microsoft.XMLHTTP");
}else{
request_type = new XMLHttpRequest();
}
return request_type;
}

var http = createObject();

/* -------------------------- */
/* LOGIN */
/* -------------------------- */
/* Required: var nocache is a random number to add to request. This value solve an Internet 

Explorer cache issue */
var nocache = 0;
function login() {
document.getElementById('log').innerHTML = "Procesando login..."
var user = encodeURI(document.getElementById('user').value);
var pw = encodeURI(document.getElementById('pw').value);
nocache = Math.random();
// Pass the login variables like URL variable
http.open('get', 'validate_user.php?user='+user+'&pw='+pw+'&nocache = '+nocache);
http.onreadystatechange = loginReply;
http.send(null);
}
function loginReply() {
if(http.readyState == 4){
var response = http.responseText;
if(response == 0){
// if login fails
document.getElementById('log').innerHTML = 'Login failed! Verify user and password';
// else
} else {
// [b]Aquí deberia poder recargar la página completa para que login.php compruebe que ya esta[/b]
// la sesion y no me cargue el formulario.
document.getElementById('log').innerHTML = response;
}
}
}
BLZKZ

Y por que con el login correcto no haces el submit y punto? xD Yo lo que hacia con los formularios era que si algo fallaba mostraba el div con el fallo que fuera, pero si todo iba correcto hacia el submit y ya que se ocupara el php destino de lo demás.

Hay cosas para la que no me gusta usar ajax como por ejemplo refrescar una pagina entera, ahi me parece mas eficiente cambiar de pagina con php xd

edit: #1

1 respuesta
eXtreM3

Aún así, es necesaria tanta complicación? Si el login es correcto haces desaparecer la capa del formulario (o la que quieras) y muestras una nueva capa (nombre de usuario, perfil...) cuyo contenido sí está cargado con ajax, lo veo infinitamente más sencillo...

Para todo lo demás #2

1 respuesta
bLero

#3

una opción era esa, si el login es correcto borrar el div del formulario con ajax.

al final preferí actualizar con window.location.reload(), que en principio pensaba que no funcionaba pero lo que no funcionaba era la sesión porque habia olvidado el session_start() en el validate_user.php y por tanto no me guardaba sesión y seguia viendo el formulario.

Un fallo tonto, gracias por las respuestas

Usuarios habituales

  • bLero
  • eXtreM3
  • BLZKZ