Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/01/2014, 07:51
starlightphp
Invitado
 
Mensajes: n/a
Puntos:
Duda con redirecciones tras un log in

Buenas tardes.

Estoy desarrollando una página web con HTML, javascript y JQUERY, php y Base de datos MySQL.

Mi duda se encuentra en el login. No quiero permitir que usuarios que no se han logueado tengan acceso al interior de mi página y para ello he planteado una variable de sesión. El tema es el siguiente. Tengo mi fichero HTML login.inc.php con el formulario correspondiente de login.

Código HTML:
<form id="l_in" action="javascript:void(0);" method="post">
	<input id="login" class="login_border_style" type="text" required name="username" size="20" placeholder="Nickname"/>
	<input id="l_pw" type="password" required class="login_border_style" name="pw" size="20" placeholder="Password"/>
	<input id="l_in_validate" type="submit" value="Entrar"/><br>
	<input id="l_remember" type="checkbox" name="remember"/>Auto Login
	<a href="#">Forgot your password?</a>
	<p id="login_not_activated">Your account isn't activated</p>
	<p id="wrong_login">Your Username or password aren't correct</p>
</form> 
Cuando se hace click en el botón de submit, se llama a una función #l_in (JQUERY)

Código Javascript:
Ver original
  1. $("#l_in").submit(function(){
  2. var Nick=$.trim($("#login").attr("value"));
  3. var Pass=$.trim($("#l_pw").attr("value"));
  4. var Check = document.getElementById("l_remember").checked;;
  5. $.getJSON('/es/framework/methods/ajax/login.php',{Nickname:Nick,Password:Pass, Checkbox:Check},Message);
  6. function Message(data){
  7.     if (data==-1)
  8.         $("#login_not_activated").css("display", "block");
  9.     else if (data==0)
  10.         $("#wrong_login").css("display", "block");
  11.     }
  12. });

esta función recoge los parámetros de cada caja, elimina sus espacios en blanco y lo envía a través de JSON encode al servidor, llamando a un archivo php login.php.

Código PHP:
Ver original
  1. require_once ($_SERVER['DOCUMENT_ROOT'].'/es/framework/classes/Builder.php');
  2. $UIProvider = Builder::getUIProvider();
  3. $_POST = $UIProvider->Login($_REQUEST);
  4. if ($_POST > 0){
  5.     $_SESSION['login'] = 1;
  6.     if (($_REQUEST['Checkbox']) == 1){
  7.         if ($_COOKIE['USR'] == "") 
  8.             setcookie("USR", $_POST, time() + (7*24*60*60),"/");
  9.     }
  10.     header ('Location: /es/page/home.inc.php');
  11. }else
  12.     echo json_encode($_POST);

Login.php se encarga de recoger el todo lo que desde javascript se ha enviado a través de json, y llama al fichero php donde unica y exclusivamente se trabaja con la base de datos (UIProvider). De existir el usuario nos devuelve el id de usuario, entonces en login.php verificamos si existe el usuario. Si existe y tenemos marcada la casilla recordar usuario, nos creará una cookie, nos iniciará la sesion y nos redireccionará, en caso contrario devolveremos a javascript el -1 si es que el usuario existe en la base de datos pero no está activado o el 0 si es que no existe ese usuario en la base de datos.
El problema viene cuando el usuario existe y además está activado, en la instrucción del header no me redirecciona a la página home.inc.php aunque si que lo hace ya que obtengo como respuesta en el firebug todo el contenido html del documento; es decir, todo el tema de url y demás está correcto, aunque temo que el problema se encuentra en que el JSON está esperando algo de retorno (el dichoso Message). Existe alguna solución para esto? o alguna otra forma de realizar el login? soy estudiante de programación autodidacta y nunca he trabajado en el mundillo este así que tampoco sé como profesionalmente se haría, aunque sí que he de decir que no me gustaría dejar una redirección del lado del cliente ya que podrían modificar cualquier parámetro para que entrara sin problemas.