Validación o autenticación de usuarios en PHP (segunda parte)

05Mar07

En esta segunda y última parte, les mostraré en que consisten los archivos login.php, autenticacion.php, aplicacion.php y un cuarto archivo salir.php

El primer archivo, login.php, es bastante simple. Sólo se trata de un simple condicional que verifica la existencia o no de una variable al principio del script que, dependiendo del resultado, muestra un texto de advertencia en un color o en otro. La última parte del script es un formulario que al introducir los datos redirigirá la página a autenticacion.php.

login.php

<html>
<head>
<title>Autenticación PHP</title>
</head>
<body>
<h1>Formulario de autenticación</h1>
<?if ($_GET["errorusuario"]=="si"){?>
<font color="red"><b>Datos incorrectos</b></font>
<?}else{?>
Introduce tu nombre de usuario y contraseña
<?}?>
<form action="autenticacion.php" method="POST">
<table border="0">
<tr><td>Nombre de usuario:</td><td><input name="usuario" size="25" value=""/></td></tr>
<tr><td>Contraseña:</td><td><input name="contrasena" size="25" type="password"/></td></tr>
<tr><td/><td><input type="submit" value="Inicio de sesión"/></td></tr>
</table>
</form>
Para ingresar, debés ingresar <b>usuario</b> en el 1er campo y <b>123</b> en el 2do.
</body>
</html>

El otro archivo es el autenticacion.php. Es también bastante simple.

autenticacion.php

<?
//vemos si el usuario y contraseña son válidos
if ($_POST["usuario"]=="usuario" && $_POST["contrasena"]=="123"){
//usuario y contraseña válidos
//se define una sesion y se guarda el dato session_start();
$_SESSION["autenticado"]= "SI";
header ("Location: aplicacion.php");
}else {
//si no existe se va a login.php
header("Location: login.php?errorusuario=si");
}
?>

Como habrán visto, se hace uso de sesiones para manejar una variable que se utilizará para indicar si el usuario se logeó en forma exitosa o no.

En estos scripts no trabajo con una base de datos para no alargar demasiado este post, pero lo que aquí sí interesa es la recuperación de las variables de usuario y la clave correctas para compararlas con las que se ingresan desde el formulario. Aquí directamente comparamos los campos ingresados del formulario con dos variables ya definidas.

En caso de ingresar los datos correctos, se crea una variable de sesion (autenticado –que será leída más tarde desde los scripts de la aplicación segura-) y se redirigirá la página a aplicacion.php. En caso de ingresar datos incorrectos, no se crea esa variable de sesion y se pasa una variable de error a login.php que sirve para mostrar en pantalla que ingresamos mal los datos.

Antes de mostrar aplicacion.php, voy a mostrarles en que consiste el bloque de seguridad que estará dentro de aplicacion.php en forma de un include.

bloqueDeSeguridad.php

<?
//Inicio la sesión
session_start();
//COMPRUEBA QUE EL USUARIO ESTA AUTENTICADO
if ($_SESSION["autenticado"] != "SI") {
//si no existe, va a la página de autenticacion
header("Location: login.php");
//salimos de este script
exit();
}
?>

En ésta parte sólo se verifica que exista la variable de sesion (autenticado). Si existe no hace nada y continúa, y si no existe, redirige la página a login.php

Ahora pasamos a ver el script aplicacion.php. Este contiene el bloque de seguridad al principio, de tal manera de que sea lo primero que se ejecute en el script… El contenido de la aplicación segura es trivial.

aplicacion.php

<?include ("bloqueDeSeguridad.php");?>
<html>
<head>
<title>Aplicación segura</title>
</head>
<body>
<h1>Ahora estás en una aplicación segura</h1>
<br>
<br>
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
<br>
<br>
<br>
<a href="salir.php">Hacé click aquí para salir</a>
</body>
</html>

Es interesante comprobar que pasa si se tipea en el browser directamente aplicacion.php. Podremos comprobar que no accede a la misma. Esto es porque en este script, al princio está el bloque de seguridad que, al no ver la variable de sesion porque no existe o porque si existe su valor es incorrecto, en vez de continuar con el script de aplicacion.php, corta todo ahí mismo y redirige a login.php

Por último para salir de la sesion, es decir para destruir la variable de sesion, se puede hacer clik en salir.php. La razón por la que podríamos desear destruir esa variable es que no quisiéramos que algún intruso aproveche el descuido de un usuario válido, que al retirarse momentáneamente de su computadora, aquél utilice ésa misma computadora para acceder a contenidos seguros.

salir.php

<?
session_start();
session_destroy();
?>
<html>
<head>
<title>Contenido no seguro</title>
</head>
<body>
Ahora estás fuera de la aplicación segura.
<br>
<br>
<a href="login.php">Autenticar usuario</a>
</body>
</html>

Eso es todo.

Se debe saber que la forma en se implementó este sistema de seguridad es bastante discutible. Por ejemplo, la variable de sesion (autenticado) es bastante simple de “adivinar” y por lo tanto, tendríamos que crear una variable de sesion con un nombre un poco mas complejo, como ser “HjkrTS3986Yg444aASds”.

Ver el ejemplo funcionando

Anuncios


96 Responses to “Validación o autenticación de usuarios en PHP (segunda parte)”

  1. 1 Luk

    Excelente articulo, era justo lo que buscaba!

  2. 2 angel

    hola me encantaría validar campos de texto

  3. Hola;

    He leído todos los artículos que he encontrado por ahí sobre este tema, sobre todo los de desarrollo web. Me he bajado los scripts y los he probado en mi propio server de pruebas (easyPHP 1.8.0.1) y resulta que no me funcionan. Me da los siguientes errores en tu script:

    1)– Notice: Use of undefined constant ”errorusuario” – assumed ‘”errorusuario”’ in pr.php on line 7

    2)– Notice: Undefined index: ”errorusuario” in pr.php on line 7

    3)– Notice: Use of undefined constant ”si” – assumed ‘”si”’ in pr.php on line 7

    Mientras que en el de desarrollo web me da el siguiente:

    1)– Notice: Undefined index: errorusuario in index.php on line 14

    ¿A qué se debe? No entiendo nada, la verdad es que ayer me iba a la perfección, pero hoy no va ni a tiros. ¿Puede ser un problema de mi servidor? ¿Cómo arreglar el estropicio? ¿Hay alguna palabra reservada para iniciar el array &_GET[], o debería tener valor null por defecto y entrar correctamente en el condicional? Como ves me pide que la variable esté definida. Mediante el empleo de
    header(“location:index.php?errorusuario=no”) parece que funciona, pero aun así se vuelve un poco loco el explorador, tanto el iexplorer como el mozilla, por no decir que éste último simplemente deja de mostrar la página y me muestra un error de conexión. No entiendo nada y ando muy perdido, no sé que puede estar fallando. ¿Alguien me podría ayudar? Avíseme al mail si no es mucha molestia para ver resultados, pues he posteado en tantos sitios que ya no sé cuantos foros tendré que volver a mirar para ver si alguien me responde con sensatez.

    Gracias de antemano, Zekinash
    (zekinash@hotmail.com)

    • 4 jesus

      es el usuario de wamp server, necesitas editar lo de php.ini checa con las cuentas de usuario para activarlo y eso queda

  4. 5 José Manuel

    Bueno el articulo, tengo un pequeño problema, yo modifique un poco el código con una conexion a una base de datos mediante php, para que busque en ella los usuarios y contraseñas, en esa tabla tambien tengo un campo denominado nivel que es un entero que determina que privilegios tiene un usuario determinado para acceder a las distintas páginas de mi aplicación mi duda es como se puede relacionar la sesion que se abre con el perfil o nivel del usuario que acaba de ingresar a la aplicación…

  5. José Manuel: sí, tenés razón este sistema de seguridad se debe usar con una base de datos para comprobar los datos de varios usuarios.
    Con respecto a tu pregunta sobre discriminar a los usuarios que acceden a tu sitio de acuerdo a “niveles”, lo que podés hacer es crear una variable de sesion con tantos valores posibles como niveles de usuarios tengas. Luego en tus páginas seguras tendrías que comprobar el valor de esa variable de sesion y, de acuerdo al valor que tenga, le permitís el acceso o no. Se entiende? En el archivo “autenticacion.php” se crea una variable de sesion “autenticado”. En tu caso tomás el “usuario”, la “clave” y el “nivel” de acceso, de una base de datos (el nivel lo tendrías que definir en la base de datos). Luego comparás usuario con lo que se ingresó en el campo de texto del formulario y lo mismo con clave. si son corectas y, según el nivel, a la variable de sesion “autenticado” le podés asignar el valor “SI_1”, “SI_2″…etc. En las páginas seguras, o más bien dentro de bloqueDeSeguridad.php, tendrías que ver si “autenticado” vale según los valores que definiste y de acuerdo a eso permitís accesos…. Vuelvo a repetir que sería aconsejable llamar a “autenticado” de otra forma y obviamente “SI_1”, “SI_2”, etc también llamarlas de otra forma para que no sean fáciles de “adivinar”.

  6. angel: ¿qué clase de validación querés hacer en un campo de texto? ¿fechas? ¿direcciones de correo? ¿o algún texto de uso particular? Te puedo adelantar que básicamente hay dos maneras de validar campos de texto. Una es del lado del servidor usando PHP, y también puede ser que además necesites hacer uso de MySQL, y la otra es validando texto del lado del cliente usando JavaScript. La principal diferencia entre estas dos formas de validación es que, con la primera, tu página está obligada a hacer un “refresh”, es decir que el browser “recarga la página”. Con Javascript, no se recarga nada. ¿En qué afecta eso?, bueno, ya lo habrás visto un montón de veces! si se produce un refresh, los otros campos de texto se borrarán (casi siempre en un formulario trabajamos con mas de un campo de texto: nombre, apellido, domicilio, edad, etc,etc) y sólo conservará texto el campo con el que estés trabajando. Esto es realmente muy molesto porque el usuario se ve obligado a cargar nuevamete todos los campos de ese formulario. En cambio, si no se produce el refresh (con JavaScript) validás el campo que te interesa y además mantenés cargados los otros campos. Eso significa que no tenés que volver a llenar todo el formulario de nuevo…. ¿Se entiende?
    Te aclaro que, también podés mantener los datos de todos los campos de texto pormás que hagas un refresh, aunque, ahí sí tenés que escribir un poco de código en php, en éste caso.
    No sé, si me das un poco más de detalles sobre qué querés validar, a lo mejor te puedo ayudar.

  7. 8 elisa

    Hola, esta muy bien el artículo y cuando lo haga funcionar me será muy útil 😀
    Me sale este error:

    Warning: main(”bloqueDeSeguridadphp”): failed to open stream: No such file or directory in c:\appserv\www\validacion\aplicacion.php on line 1

    Warning: main(): Failed opening ‘”bloqueDeSeguridadphp”’ for inclusion (include_path=’.;c:\php4\pear’) in c:\appserv\www\validacion\aplicacion.php on line 1

    he copiado tu codigo tal cual, y los nombres de los archivos estan bien. Hace falta configurar algo para poder hacer includes?

    Gracias, un saludo.

  8. 9 elisa

    2 minutos mas tarde…
    Ya lo he solucionado, se trataba de (todas) las comillas, las que has usado aqui no las reconocía… las he cambiado por ” ” y ya está.

  9. 10 elisa

    Hola,
    Tengo una cuestión referente a lo de los niveles de usuario que comentaba José Manual. En mi caso, segun el tipo de usuario tengo que mostrar una aplicacion o otra (Se trata de una biblioteca, y existen lectores y administrador). Había pensado que para cada tipo de ususario existiria un “bloquedeSeguridad” que tendria que incluirlo en cada pagina de la aplicacion correspondiete a ese usuario. Si no es asi, como se podria poner todo en un unico bloqueDeSeguridad.php?
    Gracias, un saludo.

  10. LOGIN DE USUARIOS CON DISTINTOS NIVELES DE ACCESO.

    Elisa: éste es mas o menos la solución a tu problema.

    autenticacion.php
    <?
    // Valores que se obtienen de una consulta a una bd.
    // variando a voluntad el valor de la variable $nivel por 1, 2 o 3, cambiará el contenido
    // en el script "aplicacion.php"
    $user="usuario";
    $pass="123";
    $nivel=1;
    //vemos si el usuario y contraseña es válido
    if ($_POST["usuario"]==$user && $_POST["contrasena"]==$pass){
    //usuario y contraseña válidos
    //defino una sesion y guardo datos
    session_start();
    switch($nivel){
    case 1:
    $_SESSION["autenticado"]= "nivelUno";
    break;
    case 2:
    $_SESSION["autenticado"]= "nivelDos";
    break;
    case 3:
    $_SESSION["autenticado"]= "nivelTres";
    break;
    }
    header ("Location: aplicacion.php");
    }else {
    //si no existe le mando otra vez a la portada
    header("Location: login.php?errorusuario=si");
    }
    ?>

    Aquí, básicamente, le asignamos a la variable de session tantos valores posibles como niveles de usuarios tengamos. Podrás ver que al principio de éste script, obtengo las variables $user, $pass y $nivel por medio de una consulta a una base de datos. Es interesante comentar que aquí podríamos recibir otras variables de un usuario en particular, como pueden ser la dirección, el mail, etc. Una vez discriminado un usuario y al moverse por el sitio, si éste desea mandar un mail a otro usuario, al haber ya tomado sus datos en la consulta, los valores de su dirección de correo y sus datos personales se pueden escribir “automáticamente” sin necesidad de “molestar” al usuario pidiéndole que los ingrese…. se entiende? son sólo algunas ideas.

    Siguiendo con la modificación a los script, también tenemos que modificar también el siguiente archivo:

    bloqueDeSeguridad.php
    <?
    //Inicio la sesión
    session_start();
    //COMPRUEBA QUE EL USUARIO ESTA AUTENTIFICADO
    if ($_SESSION["autenticado"] != "nivelUno" and $_SESSION["autenticado"] != "nivelDos" and $_SESSION["autenticado"] != "nivelTres") {
    //si no existe, envio a la página de autenticacion
    header("Location: login.php");
    //ademas salgo de este script
    exit();
    }
    ?>

    Acá, sólo comprobamos que la variable de session tenga como valor un valor válido.
    También cambia el archivo de aplicación.

    aplicacion.php
    <?include ("bloqueDeSeguridad.php");?>
    <html>
    <head>
    <title>Aplicación segura</title>
    </head>
    <body>
    <h1>Ahora estás en una aplicación segura</h1>
    <br>
    <?php
    session_start();
    // Muestra texto sólo para usuarios de nivel uno.
    if ($_SESSION["autenticado"] == "nivelUno") {
    echo '<font color="red"><b>Este texto es sólo para usuarios de nivel UNO</b></font>';
    }
    // Muestra texto sólo para usuarios de nivel dos.
    if ($_SESSION["autenticado"] == "nivelDos") {
    echo '<font color="red"><b>Este texto es sólo para usuarios de nivel DOS</b></font>';
    }
    // Muestra texto sólo para usuarios de nivel tres.
    if ($_SESSION["autenticado"] == "nivelTres") {
    echo '<font color="red"><b>Este texto es sólo para usuarios de nivel TRES</b></font>';
    }
    ?>
    <br>
    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
    <br>
    <a href="salir.php">Hacé click aquí para salir</a>
    </body>
    </html>

    En éste último archivo, yo muestro una sóla página con parte de su contenido discriminado para cada nivel de usuario, pero hay también otras posibilidades, como pueden ser hacer otra página para un nivel de usuario en particular, etc, etc, etc. Las posibilidades son infinitas!

    “login.php” y “salir.php”, no necesitan modificarse en éste caso.

    Saludos y espero que te sirva 🙂

  11. 12 omar

    todo excelente

  12. 13 carlos

    salee todo chidooo muy buenooo,

  13. 14 ricardo

    Gracias, este es una aplicación que necesitaba para realizar una aplicación. Es muy clara la manera en que se explica todo.

  14. 15 andres

    hola a todos, me copie el ejemplo y cuando pongo usuario y 123 en los campos correspondientes me vulve a cargar el login.php con los campos vacios, por favor si alguien sabe algo sobre el tema, desde ya se lo agradezco !!!!

  15. 16 ameth

    buenas he leido tu aplicacion tengo inconvenientes me interesa tu aplicacion pues estoy realziando un trbaja o fina l de universidad y necesito algo asi pero cuando le coloco el usuario y la contraseña se va a autenticacion.php y no prosigue de ahi agradesco tus comentarios o lso de cualqueira

  16. Hola andrés. Sólo tendrías que fijarte que en el archivo “login.php”, en la linea correspondiente a la cabecera del FORM, que ACTION sea “autenticacion.php”. Si hay algún error de tipeo, no lo reconocerá y volverá a “login.php”

  17. 18 Karla Páez

    Hola!!…pues muchísimas gracias por este súper ejemplo, me ha sido de mucha utilidad 😉

  18. 19 Ben

    Para todos aquellos que os de errores, probad a reescribir todas las comillas, ya que al hacer copy/paste del código, las comillas sufren modificación.

    Muchas gracias por este ejemplo.

  19. 20 Majony

    Mira cambia todas las comillas y la verdad cuando pongo usuario y 123 no me manda a la aplicacion no se porque alguien podria decirme

  20. hola Majony. El archivo login.php tiene una etiqueta form, que seguramente ya la habras visto en detalle. Allí, através de action, te manda al archivo autenticacion.php. Me ha pasado aveces que por no colocar bien las comillas o por un error de tipeo no esta bien escrito el archivo al que se supone debe ir. Tratá de ver si está todo bien tipedo. si continua dandote error, me podrías decir que mensaje de error te aparece?

  21. 22 Samir Cabrera Moreno

    Tengo un problema con el codigo y es que cuando digito mal el usuario y contraseña me sale el arror y me deja en login, hasta hay todo bien pero cuando escribo bien el usuario y la contraseña no me envia hacia aplicacion, sino que me deja en login como al principio claro no me muestra datos incorrectos.

    Hay que hacer un cambio al codigo o que?
    no se que pasa,

    Att,
    Samir Cabrera Moreno

  22. Hola Samir. Mirá, me parece que tendrías que ver como has tipeado las comillas. todas las comillas tienen que ser las rectas, y no las itálicas. Fijate bien porque aquí en el post aparecen algunas itálicas y no debe ser asi sino con las rectas. Pero si te continúa el error de todas maneras, analicemos un poco lo que te sucede:

    si tipeás el usuario y la contraseña correctamente y lo mismo te manda a la pagina de login, significa que no estás haciendo la comprobación $_POST[“usuario”]==”usuario” y/o $_POST[“contrasena”]==”123″) en forma correcta. Osea que lo que tipeás no es lo mismo que lo que estás comparando, no hay otra posibilidad de error supongo. Tendías que fijarte como escribiste el script en esa parte del archivo autenticacion.php.

    Ahora bien, si la comparación no fue correcta, que es justamente lo que te está pasando, se ejecuta la sentencia header(”Location: login.php?errorusuario=si”). Es decir, te manda a la página de login junto con una variable errorusuario con valor si. Te fijaste que te aparezca esa veriable validada en la barra de dirección de tu navegador? Fijate, debería aparecer.

    Por último, al volver a la página login.php, lo primero que se ejecuta es la verificación de la existencia de la variable y su valor (if $_GET[“errorusuario”]==”si”). Si no te está mostrando un mensaje de error de usuario, es porque o no existe la variable errorusuario, o si existe su valor es distinto de “si”.

  23. 24 Flor Angela

    Tengo el mismo problema que Andres, Majony , Samir Cabrera Moreno, yo creo que deberías revisar el código que aparece acá , por que no funciona correctamente

    Gracias.

    Ahh y no son las comillas…

  24. 25 Flor Angela

    Yo misma lo respondo:
    Tienen que habilitar en el php.ini una variable que por defecto es 0, la ponen en 1, debe quedar así:

    session.use_trans_sid = 1

  25. 27 Alfred

    Hola, me pasa lo que Andres, Majony , Samir Cabrera Moreno y Flor Angela, los ficheros estan correctos, editados y deberian de funcionar, sin embargo leyendo la respuesta de Flor Angela he visto que mi session.use_trans_sid lo tengo como Off, y al ser dominio de hosting no me he posible modificarlo, alguien me puede hecar un cable para solucionar este problema, repito NO es problema de comillas, y si, form dirije a donde debe, por lo q puede q el problema sea el session.use_trans_sid.

    Alguna ayuda???

    Gracias y buen finde

  26. 28 hernan

    hola, muchisimas gracias por tu informacion acerca de la seguridad, me sirvio de mucho, ya q estoy implementando un sistema de gestion vehicular y justamente me faltaba el modulo de seguridad para los usuarios. saludos y una vez mas muchas gracias

  27. 29 William

    Si funciona el codigo , revisen bien la parte de session_start() ; ahi yo tenia el error y no se iba para aplicacion.php
    De toda la informacion sobre sesiones que encontrado, esta es la mejor practica
    sencilla y facil de entender.

    • 30 Dash

      Hola William he revisado el codigo en la parte de session_start(); y esta bien podrias señalar el error que encontraste por favor, la verdad es que he hecho de todo lo que nuestros compañeros han dicho y sigue igual pero si a ti te funciono de otra forma espero la hagas saber, gracias…

  28. 31 Henry

    Hola a todos, en estos momentos tengo una base de datos con los login y password, necesito saber como hago para que este me consulte la base de datos y me diga si estos son correctos. En caso contrario que no me deje ingresar.
    Por su colaboración muchas gracias.

  29. 32 alejandro lopez

    hola la verdad te agradesco mucho tu informacion me ayudo mucho en la elaboracion de mi proyecto escolar.

    pero tengo que aclarar algo en el codigo relacionado con “autenticacion.php”
    no inicias session_start(); esto provoca un error el cual te impide visualizar la pagina “aplicacion.php” el siguiente es el codigo corregido, que al menos a mi me funciono a si:

    • 33 alucard

      pues n aparece el codigo corregido, escribilo o ayudame a corregirlo.
      saludos

  30. 34 alfonso

    hola buenas tardes.
    no tengo muchos conocimientos de php, he estado he visto varios manuales, pero hay algunos conceptos que no comprendo bien, he puesto en funcionamiento el ejemplo y funciona perfectamente, quiero utilizar una base de datos que contiene un codigo y un nombre para cada usuario, pero no se como integrarla al ejemplo que nos muestras, te agradeceria me orientaras como hacerlo.

    reitero mi agradecimiento por tu atencion y tu tiempo que le puedas brindar a mi solicitud

  31. 35 carlos

    no me funciona el codigo al tratar de integrarlo a mi web, hice la prueba de copiar tambien directamente el codigo sin cambiarle naday tampoco me funciona, al poner el usuario y el password me devuelve a login y no me sale error ni nada. que puede ocurrir con esto?

    gracias

  32. 36 Oswaldo

    me gusto el consejo muy bueno y sirve lo estoy poniendo en practica y que los conocimientos se compartanr

  33. 37 Eric

    Hola a todos espero que esten bien y me puedan ayudar.
    cuando lo inicio me aparece este error:

    Notice: Undefined index: errorusuario in c:\archivos de programa\easyphp1-8\www\validar usuario y contraseña\login.php on line 7
    Introduce tu nombre de usuario y contraseña

    ya..

    y cuando le doy y contraceña y el nombre de usuario correcto0 me sale este error:

    Notice: Undefined index: autenticado in c:\archivos de programa\easyphp1-8\www\validar usuario y contraseña\bloqueDeSeguridad.php on line 5

    Warning: Cannot modify header information – headers already sent by (output started at c:\archivos de programa\easyphp1-8\www\validar usuario y contraseña\bloqueDeSeguridad.php:5) in c:\archivos de programa\easyphp1-8\www\validar usuario y contraseña\bloqueDeSeguridad.php on line 7

    ojalà alguien sepa comolo puedo solucionar gracias

  34. pero si pongo en la direccion aplicacion.php la abre y asi que chiste aun no me halla logeado
    faltaria colocar authentificacion en aplicacion.php para que afuerza uno se tenga que logear para poder visualizar esa url

  35. 39 koflayn

    No se cual es el error del codigo por el cual cuando se coloca el usuario y la contraseña no redirecciona correctamente, pero encontre la solucion haciendo que tome los datos de USUARIO y CONTRASEÑA desde MYSQL.

    Remplazando el codigo del archivo “autenticacion.php” por el siguiente codigo:

    ———————————————–
    y este es el codigo del archivo “conexion.php” donde deben colocar los datos de su base de datos:

    ——————————————————————

    espero les funcione tan bien como ami.

  36. 40 koflayn

    che wlannot no me sensures el codigo que ahí esta la papa!!!!

  37. 41 alexis

    no tienes para descargar la web? seria de mucha ayuda

  38. 42 Martin

    Si mi ignorancia no es mucha , creo que hay un error , a saber: cuando se referencia una variable de sesion primero se debe saber si existe dicha variable
    (if (! isset($_SESSION[“nom_usu”]) ))

    saludos

  39. 43 Natalia

    realmente es exelente el articulo y la explicacion, funciona a la perfeccion y esta muy sencillo explicado. Muchisimas gracias, me ahorraste mucho tiempo en andar buscando por foros donde nunca queda nada claro. Nuevamente gracias

  40. Gracias, me sacaron de un apuro. Saludos

  41. 45 FallOutBoy

    Muy buena explicación y muy bien detallado el funcionamiento de cada etiqueta. Pero me sale este error al loguear:
    Warning: Cannot modify header information – headers already sent by (output started at public_html/null0bject/Login/autenticacion.php:2) in /public_html/null0bject/Login/autenticacion.php on line 8
    Y no me redirige a la aplicacion. :S

  42. 46 koflayn

    FallOutBoy, chequea que no exista ningun espacio antes de la etiqueta

  43. 47 FallOutBoy

    Solucionado! ^^ Se me olvido codear el inicio de session, ya va. Gracias!

  44. 48 Martin

    A mi me sale el mismo error (Warning: Cannot modify header information – headers already sent by (output started at /home/martin/web/AUTH/autenticacion.php:1) in /home/martin/web/AUTH/autenticacion.php on line 8), Como es eso de codear el inicio de sesión. Lo único que hice es copiar y pegar el códido publicado con los nombres que figuran para hacer pruebas.
    Muchas gracias.

  45. 49 Dante

    Para los que tengan el mismo problema que Andres, Majony , Samir Cabrera Moreno y Flor Angela, parece que se debe a lo siguiente, cuando copias el codigo la llamada a session_start(); en autenticacion.php queda dentro del comentario que esta arriba por lo tanto nunca se llama y $_SESSION[“autenticado”]= “SI”; no se guarada. Bastante simple pero me causo muchos problemas jajajajajaja

  46. 54 Jose Antonio

    A mi me funciona pero me sale:

    Warning: session_start() [function.session-start]: Cannot send session cache limiter – headers already sent (output started at C:\web\gonzalez1977.dns2go\bloquedeseguridad.php:2) in C:\web\gonzalez1977.dns2go\bloquedeseguridad.php on line 4

    cuando entra en la pagina web “segura”. Esto sale al principio de a pagina y logicamente no lo puedo publicar asi.
    Alguien sabe a que se debe ??.

    Gracias de antemano,

    Jose

  47. 55 Rikardo

    Mi inkietud es la siguiente…
    al momento de ingresar el usuario y kontraseña me lleva nuevamente a la pagina de login… con los kampos vacios.
    en kambio kuando koloko en la pagina de autenticacion.php la linea de include(‘bloqueDeSeguridad.php’); en komentario y ejekuto la aplikacion ahi si me funciona korrectamente y le lleva a la pagina de aplikacion.php pero logikamente ke esa no es la idea…

    si alguien me puede ayudar se lo agradeceria… salu2

  48. 56 Jose

    El articulo esta muy bueno, pero me surge una inquietud…. Como puedo validar los campos en blanco aca para usuario y contraseña??? Seria de mucha ayuda si me colaboran con el codigo xD… Gracias!!!

  49. 57 Daniela

    Esta muy bien explicado.Me sirvio de mucho.
    Gracias..

  50. 58 Jose

    Muy buen articulo justo lo que se necesita para apender a usar sessiones

    Muchas Gracias por el aporte

  51. 59 Sergio

    Hola, mi consulta es la siguiente, tengo un formulario similar pero el problema resulta al introducirle base de datos, nose como realizar la consulta para que valide usuario y password ejemplo:

    mysql_query(“SELECT user,password FROM users ……….. aqui nose que mas ponerle, nose como hacer que valide el usuario y password, y como seguir, si puedes ayudarme te estaria eternamente agradecido.

    Saludos.

    • Hola Sergio.

      Bueno, aquí te paso una posible solución para tu problema. Puede completarse mucho mas, pero básicamente seria algo asi:

      // me conecto a la base de datos (bd)
      include ('cnn.php');
      // consulto en la tabla la clave del usuario ingresado.
      $res = $cxn->query("select clave from usuarios where nombre='".$_GET['nombre']."'");
      while ($fila = $res->fetch_array(MYSQLI_ASSOC)){
      $clave = $_GET['clave'];
      if ($fila[clave]==$clave){
      header ("location:aplicacion.php");
      }else{
      header ("location:avisoDeError.php?nombre=".$_GET['nombre']);
      }
      }

      Eso es todo. Espero que te sirva.

  52. Bueno estuve dándole un buen rato vueltas al código, el cual esta muy completo. Pero también tuve el problema de que me redirigía a la pagina de login sin mostrarme error. Siguiendo el codigo, llegue a la conclusion que el problema estaba en que no evaluava correctamente if ($_SESSION[“autenticado”] != “SI”) .

    Pero a pesar de llegar hasta ahi no podia comprender el por que. Luego recorde que habia leido en una de las paginas del manual de php que session_start(); debe ser lo primero en una pagina, no debe haber nisiquiera un espacio. Asi que eso hice, entonces en el archivo bloqueDeSeguridad.php la primera linea me queda asi: <?phpsession_start();

    Muy completo tu articulo y muchas gracias!!!

  53. Muchas felicitaciones wlannot.

    Desde hace un tiempo estaba buscando una explicacion como esta para el uso de sesiones.

    Lo probe y funciono a la perfección, pero aun así no lo voy a usar en mi aplicacion, como dije me sirvio de mucho la explicacion que has colocado y eso es lo que realmente me ha dado pie para hacer mi manejador de sesion como clase, es decir, orientedo a objeto (POO).

    Gracias por un post tan educativo, sigue así.

  54. 63 NaNa

    Hola buenas! Me ha encantado encontrar este articulo wlannot, muchisimas gracias porque es justo lo que necesito para un proyecto sencillito. Aunque tengo que admitir que mis conocimientos sobre PHP son un poco escasos y hay un par de cosas que no termino de entender y no consigo que funcione:

    1.- Cuando abro la pagina login.php, ya de primeras, me sale la frase “Datos incorrectos” que por lo que he podido entender aqui deberia salir despues de un intento fallido de inicio de sesion. Introduzco un nombre de usuario y una contraseña y tanto si son correctos como sino pasa a la pagina autenticacion.php pero no sale de ahi. Veo una pagina en blanco y en la barra de direcciones me dice que estoy en autenticacion.php pero no paso de ahi.

    2.- En aplicacion.php, en la linea , no deberia haber algun espacio en blanco? Lo digo porque lo he copiado en el DreamWeaver y normalmente los textos salen con diferentes colores, sin embargo esa linea me sale completamente azul. He probado a ponerle espacios pero aunque los colores cambian sigue sin funcionarme.

    La verdad es que no se que hacer porque he mirado todos los comentarios de la gente y aunque he probado varias cosas de las que decis no consigo que cambie nada, es mas, cuantas mas cosas cambio peor me funciona.

    Muchisimas gracias por vuestra ayuda de antemano,
    NaNa

  55. Hola. He probado el código, lo he modificado a mi gusto, pero cuando intento acceder, el bloqueDeSeguridad.php me da error, porque me redirige a la página de iniciar sesión.

    Es decir, introduzco los datos correctamente, y cuando aplicacion.php hace uso de bloqueDeSeguridad.php, no me lleva a la pagina que debe de llevarme al estar logueado correctamente, sino que me lleva de nuevo a login.php

    ¿Alguna manera de solucionarlo?

    Muchas gracias.

  56. 65 Yasmin

    Excelente, me ayudo mucho

    Tenia el problema que se quedaba en login.php y no entraba a la sesion autenticada, fue el mismo error donde la instruccion session_start(); quedaba dentro del comentario y ahora me funciona perfecto

    Graciasssss

  57. Mi problema era el siguiente:

    si introducia el user o el password mal me mandaba para el login indicadome el error. Hasta ahi estaba todo ok, pero el tema es que si digitaba el user y el password bien tambien me mandaba para el login (no me mostraba el mensaje de error) y nunca lograba entrar a aplicacion.php apesar de introducir correctamente los datos. SOLUCION: agregue la siguiente linea: session_start(); al principio de “autenticacion.php” . Pienso que es por que para guardar la variable de sesion, la sesion debe haber sido empezada. Saludos y muchas gracias por compartir informacion. Pepe-Punta del este-Uruguay

  58. 67 Carla

    Está muy bien este artículo pero estoy teniendo un problemilla que no logro resolver. Al abrir aplicacion. php, me redirecciona a la página de autenticacion pero tanto si usuario y contraseña coinciden como si no no vuelve a la página de aplicacion.php en caso de coincidir o index.php en caso de no coincidir.
    A ver si me podeis echar una mano.
    Muchas gracias.

  59. 68 Frank

    Muchas gracias, me sirvio bastante..
    Tambien tuve el error de la mayoria, y efectivamente era de la linea session_start(); que quedaba comentada en el archivo autenticacion.php
    Gracias

  60. 69 Malussa

    Hola. ya hice todos los cambios sugeridos por todos sin embargo me sigue redireccionando a la página de login.php
    Alguien a quien ya le este funcionando podría enviarme el codigo corregido??
    Gracias!
    ————–login.php————————–

    Autenticación PHP

    Formulario de autenticación

    Datos incorrectos

    Introduce tu nombre de usuario y contraseña

    Nombre de usuario:
    Contraseña:

    Para ingresar, debés ingresar usuario en el 1er campo y 123 en el 2do.

    ————–autenticacion.php————————–

    ———————————-bloqueDeSeguridad.php————————–

    ———————————-aplicacion.php————————–

    Aplicación segura

    Ahora estás en una aplicación segura

    test test test

    Hacé click aquí para salir

    ——————————————
    GRACIAAAAAAS

  61. Ou gracias!…es lo que necesitaba para mi sistema…cada vex haciendo un mejor codigo, yies!

  62. 71 yesid

    excelente articulo , muy consiso , siga y continua aporetanndo conociemiento

  63. 72 mgl83

    y si quiero poner varios usuarios con distintas claves redireccionados a distintos archivos “aplicacion.php”???

  64. 73 phantom

    todo esta bueno.. pero tengo una duda por que el scrip de autenticacion no me correo ni el de bloque de seguridad… he seguido los pasos pero no hace nada… la de login si me funciona..luego metes el usuario y el pass y solo abre otra pagina y no se pasa a la de aplicacion… espero me puedan ayudar.. mil gracias…

    • 74 hugo

      fijate mi pana yo solo hago el login pero no me muestra nada es como si no me llevara a la autenticacion

  65. 75 ivan

    para los q no le cambia a aplicacion.php la solucion esta arriba en la respuesta 47 me demore leyendo uno por uno pero lo encontre muchas gracias!!

  66. 76 Umartin

    Para todos: la solución es esta:
    En los archivos bloqueDeSeguridad.php y autenticacion.php
    La primera linea de código debe ser <?session_start();
    Y con esto funciona. Yo por las dudas borre todos los comentarios del código también.

    Saludos !

  67. 77 rodrigo

    hola a todos no se si me pueden ayudar, tengo un problema despues de ingresar el nombre de ususario y la contraseña sin importar cuales sean me redirige a la pag. autenticacion y ahi se queda en blanco no avanza ni nada por el estilo ya revise el codigo y todo parece estar bien.
    haber si me pueden ayudar

    • hola rodrigo tengo el mismo problema k vos 😉 pero ami el no0mbre de usuario nada mas !alfin alguien que me entiende ♥ chauu

  68. Hola a todos!!tengo un problema ,me quiero hacer una cuenta de mundo tkm y me dice que ponga usuario(*)????????yo lo pongo y me dice :ingrese su usuario valido,,,,algo asi porfasss alguien que me ayudee!!!!!! 🙂

  69. 80 lili

    gracias funciona muy bien

  70. 81 king

    hermano me has salvado, he buscado esto por no tienes idea y siempre se podia acceder a mi pagina son escribiendo el nombre en la barra de direcciones sin necesidad de autentificacion pero ahora no tengo problemas

  71. 82 hugo

    a mi me pasa algo que no se si aqui se presento ese problema yo voy a la primera parte (login) pero cuando le doy inicio de sesion no me hace nada me lleva a una pagina en blanco… y eso que copie tal cual esta todo aqui para ver si servia la prueba

  72. 83 laura

    No me funciona el codigo, del el usuario y la contraseña no pasa

  73. 84 Raul Garcia

    Gracias pro la Ayuda no sabes como me sirvio estoy aprendiendo esto de sesiones y con tu ejemplo me quedo mas claro ahora quiero aprender insertar y sacar los datos de una BD para autenticar los valores me podrias ayudar???

  74. A mi me funciona, pero el bloqueo o autenticacion no funciona, deja entrar a todo el mundo,
    no funciona para nada, me deja entrar con solo colocar las paginas en la dirección. Que sera, jum?

    • 86 jesus

      PHP también se puede configurar editando su archivo de configuración llamado “php.ini” funciona de una forma similar al archivo de configuración de apache, solo que aquí las líneas con punto y coma se consideran como comentarios. Algunos de los parámetros contenidos en este archivo se muestran en la tabla 3.5

      amigos si gustan les paso el codigo de autentificacion.php y otros codigos mas de php, solo mandenme un correo a J_02_25@yahoo.com.mx y con gusto les mando los archivos que tenfo, el problema que ustedes tienen es con el archivo php.ini en la parte de

      chequen con el archivo php.ini

      PARAMETRO SIGNIFICADO
      register_globals = Off Habilita o deshabilita el manejo de variables globales en el código de php
      extension_dir = “c:/wamp/php/ext/” Especifica el directorio de los archivos de librería dinámica usados por php
      extension=php_mysql.dll Agrega la librería MySQL en php
      session.save_path = “c:/wamp/tmp” Directorio donde se guardan los registros de sesiones de php
      display_errors = On Habilita o deshabilita el despliegue de errores al ejecutarse el código de php
      session.auto_start=1 Habilita el manejo de sesiones automáticamente
      session.cache_expire = 180 Define la duración de las páginas de session en cache, en minutos.

  75. 87 jesus

    Autenticación

    <?php
    echo"

    Datos de tu cuenta

    USUARIO

    CONTRASEÑA

    “;
    ?>

  76. 88 jesus

    Autenticación

    <?php
    $us= $_POST[usuario];
    $clave= $_POST[clave];
    include "conexion.php";
    $conexion=conectar();
    //Busca el cliente en la tabla de clientes
    $sql="select * from clientes where id_clie='$us' and clave='$clave'";
    $reg = mysql_query($sql, $conexion);
    $r= mysql_fetch_object($reg);
    $n=mysql_num_rows($reg); //Número de registros de la consulta
    if ($n==1) //Se encontro al cliente
    echo"BIENVENIDO $r->nom”;
    else //No se encontro al cliente
    echo”USUARIO NO REGISTRADO”;
    ?>

  77. 89 suga

    como se hace una pagina que tenga un usuario y contraseña y que en un archivo de texto diga la contraseña y al escribirla si esta bien lo que dice el archivo de texto la contraseña me diga correcto y si no esta bien que diga incorrecto me regrese a la primera donde esta como entrar y que al mismo tiempo un COOKIe

  78. 90 Diana

    Bueno bueno bueno, al principio no me fucionaba, y soy de las que no lee comentarios, pero un nose que me dio verlos y vi que a varios les funciono y a otros no, les dire que hice yo:

    primero en bloquedeseguridad.php al inicio no tenia <?php simplemente <?, lo mismo en autenticacion.php, en aplicacion.php estaba antes y le quite los parentesis y agregue <?php!!!. y me funciono el que haya que autenticarse!!!…pero ahorita probe ingresar la pass y no me deja!!!….si resuelvo aviso!!!

  79. 91 Diana

    Bueno de nuevo lo mismo, en salir.php, pero lo modifique, le quite lo de html y lo deje puro php, redireccionando a mi pagina de inicio despues de que se cierre mi session, y la parte de usuario habia leido que se borrara mejor la parte de : session_start(); if ($_SESSION[“autenticad….., pero no lo recomiendo, lo coloque de nuevo y funciono!!!.

  80. 92 mameluco

    en login.php la linea

    if ($_GET[“errorusuario”]==”si”)

    cambienla por la siguiente

    if (isset($_GET[“errorusuario”]) && $_GET[“errorusuario”]==”si”)

    y solucion final para los que tienen el error “Notice: Undefined index: errorusuario in C:\xampp\htdocs\login\login.php”

  81. 93 mameluco

    asi qedo el login.php funcionando al pelo sin tocar el php.ini

    Autenticación PHP

    Formulario de autenticación

    Datos incorrectos

    Introduce tu nombre de usuario y contraseña

    Nombre de usuario:
    Contraseña:

    Para ingresar, debés ingresar usuario en el 1er campo y 123 en el 2do.

  82. 94 alex

    A mi me da el siguiente error al clicar al enlace para salir
    Fatal error: Call to undefined function session_detroy() in C:\wamp\www\htdocs\salir.php on line 3

  83. 95 seba

    Analizando el codigo pude detectar que en el codico de autentication.php falta session_start(); el cual permite la escritura del $_SESSION.

    Genial el codigo ., me ayudo mucho

  84. 96 hernan uribe

    El problema mio es que yo tengo 2 radiobutton admin y usuario, no se como lograr que me funcionen independientemente


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


A %d blogueros les gusta esto: