Foros del Web » Programando para Internet » PHP »

Sistema de autentificación

Estas en el tema de Sistema de autentificación en el foro de PHP en Foros del Web. Saludos, vengo con otro problemita jeje, resulta que he conseguido un sistema de login con AJAX, y bueno, muy bonito resulto, ahora el problema es ...
  #1 (permalink)  
Antiguo 19/01/2009, 05:22
 
Fecha de Ingreso: enero-2008
Ubicación: Valencia
Mensajes: 23
Antigüedad: 16 años, 3 meses
Puntos: 0
Pregunta Sistema de autentificación

Saludos, vengo con otro problemita jeje, resulta que he conseguido un sistema de login con AJAX, y bueno, muy bonito resulto, ahora el problema es que no se que script debo colocar en las paginas que deseo controlarles el acceso, es decir, que si no ha hecho el login no les deje accesar al archivo...

El sistema de login está acá y lo coloco para que vean de donde salen los datos y cuales son las cookies que verifica, asi se hacen posiblemente tengan idea de lo que nesesito colocar en los archivos.

Código PHP:
<?php
include("conex.php");
ob_start(); //esto es para habilitar el buffer de salida. Esto para poder enviar las cookies al navegador sin que te marque error

//Desconectar
if ($_POST["n"]=='2'//si n=2 significa que el usuario ya habia iniciado sesion y ahora esta cerrando sesion
 
{
  
setcookie("Nick"); //borramos el valor de las cookies
  
setcookie("Pass");  
  
$aux="'login','0'";
  
header("location: checar.php"); //redireccionamos a este mismo archivo nuevamente
 
}
$n=$_COOKIE["Nick"]; //sí el usuario ya habia iniciado sesion, $n y $p contendran el user y pass de ese usuario
$p=$_COOKIE["Pass"];

$sql=mysql_query("SELECT * FROM usuarios WHERE user='$n' AND pass='$p'") or die (mysql_error()); 
$total=mysql_num_rows($sql);
if (
mysql_num_rows($sql)==0//si NO ha iniciado sesion   

  
{
   if (
$_POST["n"]=='1'//si el user ya envio el formulario
    
{
     
$usuario=$_POST["user"];  //recivimos datos enviados desde login.php mediante post usando ajax
     
$contraseña=$_POST["pass"];
       
     
$cad=mysql_query("SELECT * FROM usuarios WHERE user='$usuario' AND pass_md5='$contraseña'") or die (mysql_error());
     if (
mysql_num_rows($cad)==0//Si es INCORRECTO el user y pass
 //Si es INCORRECTO el user y pass
       
{  
       
//echo '3';    //el usuario o pass son incorrectos... imprimimos formulario y mensaje de error
       
echo '<form action="javascript: enviar(\'login\',\'1\');" name="login" id="login">
          <div id="labels">
            <div id="lbl_user"><label>Usuario</label></div>
            <div id="lbl_pass"><label>Password</label></div>
          </div>
          
          <div id="inputs">
            <div id="inp_user"><input name="user" class="MC_input" id="user" type="text" maxlength="30" /></div>
            <div id="inp_pass"><input name="pass" class="MC_input" id="pass" type="password" maxlength="30" /></div>
            <div id="inp_enviar"><input type="submit" class="MC_enviar" name="enviar" value="Enviar"/></div> 
          </div>
          
          <div style="clear:both;"></div>
          
          <div id="inp_r"><label id="r" class="res">Usuario o password incorrectos</label></div> 
        </form>'
;    
       } 
     else 
//si todo salio bien
       
{
        
setcookie("Nick"$usuariotime()+604800); //enviamos las cookies al nacegador [expiraran dentro de una semana]
        
setcookie("Pass"$contraseñatime()+604800);  
        
//echo '1'; //damos bienvenida
        
echo '<form action="javascript: enviar(\'login\',\'1\');" name="login" id="login">
          <div id="inp_r"><label>Bienvenid@ '
.$usuario.'</label></div> 
          <div id="salir"><a href="javascript: enviar(\'login\',\'2\');">Cerrar sesion</a></div> 
        </form>'
;    
       }
    }
   else 
//si NO ha enviado el formulario      
    
{  
     
//echo '2'; //no ha enviado formulario... imprimimos formulario
     
echo '<form action="javascript: enviar(\'login\',\'1\');" name="login" id="login">
          <div id="labels">
            <div id="lbl_user"><label>Usuario</label></div>
            <div id="lbl_pass"><label>Password</label></div>
          </div>
          
          <div id="inputs">
            <div id="inp_user"><input name="user" class="MC_input" id="user" type="text" maxlength="30" /></div>
            <div id="inp_pass"><input name="pass" class="MC_input" id="pass" type="password" maxlength="30" /></div>
            <div id="inp_enviar"><input type="submit" class="MC_enviar" name="enviar" value="Enviar"/></div> 
          </div>
          
          <div style="clear:both;"></div>
          
          <div id="inp_r"><label id="r" class="res"></label></div> 
        </form>'
;    
    } 
  }
else 
//si ya inicio sesion
  
{  
   
//echo '1'; //damos bienvenida 
    
echo '<form action="javascript: enviar(\'login\',\'1\');" name="login" id="login">
          <div id="inp_r"><label>Bienvenid@ '
.$_COOKIE["Nick"].'</label></div> 
          <div id="salir"><a href="javascript: enviar(\'login\',\'2\');">Cerrar sesion</a></div> 
        </form>'
;
  } 
   
ob_end_flush(); //esto va para poder enviar headers al navegador sin tener problemas
?>
Saludos!
  #2 (permalink)  
Antiguo 19/01/2009, 05:40
 
Fecha de Ingreso: marzo-2005
Mensajes: 197
Antigüedad: 19 años, 2 meses
Puntos: 1
Respuesta: Sistema de autentificación

Yo lo que haría sería crear una sesión cuando el login sea efectivo (es decir, cuando compruebes que el usuario y la contraseña que se han introducido en el logeo son válidos)

Es decir, que si no hay ningún problema cambiaría el

Código PHP:
setcookie("Nick"$usuariotime()+604800); //enviamos las cookies al nacegador [expiraran dentro de una semana]
setcookie("Pass"$contraseñatime()+604800); 
Por

Código PHP:
$_SESSION["Nick"] = $usuario;
$_SESSION["Pass"] = $contraseña
$_SESSION
["autentificado"] = "SI"
Así sólo tendrías que añadir un sencillo script al comienzo de cualquiera de las páginas en las que quieras hacer la autentificación, algo como:

Código PHP:
session_start ();

if (!isset (
$_SESSION["autentificado"]) || is_null($_SESSION["autentificado"]) || $_SESSION["autentificado"] != "SI")
          
header("Location: index.php?error=No estas logueado"); 
O algo similar.

Espero que te ayude.



Un saludo.
  #3 (permalink)  
Antiguo 19/01/2009, 07:03
 
Fecha de Ingreso: enero-2008
Ubicación: Valencia
Mensajes: 23
Antigüedad: 16 años, 3 meses
Puntos: 0
De acuerdo Respuesta: Sistema de autentificación

Cita:
Iniciado por Koden Ver Mensaje
Yo lo que haría sería crear una sesión cuando el login sea efectivo (es decir, cuando compruebes que el usuario y la contraseña que se han introducido en el logeo son válidos)

Es decir, que si no hay ningún problema cambiaría el

Código PHP:
setcookie("Nick"$usuariotime()+604800); //enviamos las cookies al nacegador [expiraran dentro de una semana]
setcookie("Pass"$contraseñatime()+604800); 
Por

Código PHP:
$_SESSION["Nick"] = $usuario;
$_SESSION["Pass"] = $contraseña
$_SESSION
["autentificado"] = "SI"
Así sólo tendrías que añadir un sencillo script al comienzo de cualquiera de las páginas en las que quieras hacer la autentificación, algo como:

Código PHP:
session_start ();

if (!isset (
$_SESSION["autentificado"]) || is_null($_SESSION["autentificado"]) || $_SESSION["autentificado"] != "SI")
          
header("Location: index.php?error=No estas logueado"); 
O algo similar.

Espero que te ayude.



Un saludo.
Antes que nada, Gracias por la respuesta! Ya voy entendiendo más o menos como va la cosa. Ahora, hize lo que propusistes, acá el codigo

Código PHP:
<?php
include("conex.php");
ob_start(); //esto es para habilitar el buffer de salida. Esto para poder enviar las cookies al navegador sin que te marque error

//Desconectar
if ($_POST["n"]=='2'//si n=2 significa que el usuario ya habia iniciado sesion y ahora esta cerrando sesion
 
{
  
setcookie("Nick"); //borramos el valor de las cookies
  
setcookie("Pass");  
  
$aux="'login','0'";
  
header("location: checar.php"); //redireccionamos a este mismo archivo nuevamente
 
}
$n=$_COOKIE["Nick"]; //sí el usuario ya habia iniciado sesion, $n y $p contendran el user y pass de ese usuario
$p=$_COOKIE["Pass"];

$sql=mysql_query("SELECT * FROM usuarios WHERE user='$n' AND pass='$p'") or die (mysql_error()); 
$total=mysql_num_rows($sql);
if (
mysql_num_rows($sql)==0//si NO ha iniciado sesion   

  
{
   if (
$_POST["n"]=='1'//si el user ya envio el formulario
    
{
     
$usuario=$_POST["user"];  //recivimos datos enviados desde login.php mediante post usando ajax
     
$contraseña=$_POST["pass"];
       
     
$cad=mysql_query("SELECT * FROM usuarios WHERE user='$usuario' AND pass_md5='$contraseña'") or die (mysql_error());
     if (
mysql_num_rows($cad)==0//Si es INCORRECTO el user y pass
 //Si es INCORRECTO el user y pass
       
{  
       
//echo '3';    //el usuario o pass son incorrectos... imprimimos formulario y mensaje de error
       
echo '<form action="javascript: enviar(\'login\',\'1\');" name="login" id="login">
          <div id="labels">
            <div id="lbl_user"><label>Usuario</label></div>
            <div id="lbl_pass"><label>Password</label></div>
          </div>
          
          <div id="inputs">
            <div id="inp_user"><input name="user" class="MC_input" id="user" type="text" maxlength="30" /></div>
            <div id="inp_pass"><input name="pass" class="MC_input" id="pass" type="password" maxlength="30" /></div>
            <div id="inp_enviar"><input type="submit" class="MC_enviar" name="enviar" value="Enviar"/></div> 
          </div>
          
          <div style="clear:both;"></div>
          
          <div id="inp_r"><label id="r" class="res">Usuario o password incorrectos</label></div> 
        </form>'
;    
       } 
     else 
//si todo salio bien
       
{
            
$_SESSION["Nick"] = $usuario;
            
$_SESSION["Pass"] = $contraseña;
            
$_SESSION["autentificado"] = "SI";  
        
//echo '1'; //damos bienvenida
        
echo '<form action="javascript: enviar(\'login\',\'1\');" name="login" id="login">
          <div id="inp_r"><label>Bienvenid@ '
.$usuario.'</label></div> 
          <div id="salir"><a href="javascript: enviar(\'login\',\'2\');">Cerrar sesion</a></div> 
        </form>'
;    
       }
    }
   else 
//si NO ha enviado el formulario      
    
{  
     
//echo '2'; //no ha enviado formulario... imprimimos formulario
     
echo '<form action="javascript: enviar(\'login\',\'1\');" name="login" id="login">
          <div id="labels">
            <div id="lbl_user"><label>Usuario</label></div>
            <div id="lbl_pass"><label>Password</label></div>
          </div>
          
          <div id="inputs">
            <div id="inp_user"><input name="user" class="MC_input" id="user" type="text" maxlength="30" /></div>
            <div id="inp_pass"><input name="pass" class="MC_input" id="pass" type="password" maxlength="30" /></div>
            <div id="inp_enviar"><input type="submit" class="MC_enviar" name="enviar" value="Enviar"/></div> 
          </div>
          
          <div style="clear:both;"></div>
          
          <div id="inp_r"><label id="r" class="res"></label></div> 
        </form>'
;    
    } 
  }
else 
//si ya inicio sesion
  
{  
   
//echo '1'; //damos bienvenida 
    
echo '<form action="javascript: enviar(\'login\',\'1\');" name="login" id="login">
          <div id="inp_r"><label>Bienvenid@ '
.$_COOKIE["Nick"].'</label></div> 
          <div id="salir"><a href="javascript: enviar(\'login\',\'2\');">Cerrar sesion</a></div> 
        </form>'
;
  } 
   
ob_end_flush(); //esto va para poder enviar headers al navegador sin tener problemas
?>
y cree un archivo para probar lo de la autentificación

Código PHP:
<?php
session_start 
();

if (!isset (
$_SESSION["autentificado"]) || is_null($_SESSION["autentificado"]) || $_SESSION["autentificado"] != "SI")
          
header("Location: index.php");  
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin t&iacute;tulo</title>
</head>

<body>
PruebaA!
</body>
</html>
Lo que sucede es que no está verificando las cookies, es decir, envia directamente al header como si no hubieses pasado el login (cosa que si)

Perdón por lo poco conocedor del tema, seguro es una pavada. jeje.

Gracias de nuevo!
  #4 (permalink)  
Antiguo 30/01/2009, 12:09
 
Fecha de Ingreso: marzo-2005
Mensajes: 197
Antigüedad: 19 años, 2 meses
Puntos: 1
Respuesta: Sistema de autentificación

Yo lo haría así (te lo resumo esquemáticamente)

Esto sería el index
Código PHP:
<?php
  
if (isset $_POST["ctrl"])
  {
       
//Compruebo que el usuario se autentifica
      
if (isset ($error)) //Si hay error
        
header ("Location: index.php?error=" $error);
      else 
//Si todo va bien
        
header ("Location: aplicacion.php"); //Si no lo hay, nos vamos a la página que requiere autentificación
  
}
?>
<html>
  <head>
  </head>
  <body>
    <form action="index.php" method="post">
      <input type="hidden" name="ctrl" value="ctrl">
      <!-- Demás campos -->
      <submit />
    </form>
  </body>
</html>
Después, en las páginas que requieran autentificación, sólo necesitas incluir un pequeño include (seguridad.php o algo así) con las líneas que ya te comenté

Y esto debería ir (te recomiendo que en un include) en las páginas privadas
Código PHP:
session_start ();

if (!isset (
$_SESSION["autentificado"]) || is_null($_SESSION["autentificado"]) || $_SESSION["autentificado"] != "SI")
          
header("Location: index.php?error=No estas logueado"); 
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:36.