Validación o autenticación de usuarios en PHP (segunda parte)
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”.
Filed under: PHP | 96 Comments
Etiquetas: PHP, seguridad
Excelente articulo, era justo lo que buscaba!
hola me encantaría validar campos de texto
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)
es el usuario de wamp server, necesitas editar lo de php.ini checa con las cuentas de usuario para activarlo y eso queda
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…
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”.
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.
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.
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á.
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.
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 🙂
todo excelente
salee todo chidooo muy buenooo,
Gracias, este es una aplicación que necesitaba para realizar una aplicación. Es muy clara la manera en que se explica todo.
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 !!!!
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
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”
Hola!!…pues muchísimas gracias por este súper ejemplo, me ha sido de mucha utilidad 😉
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.
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
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?
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
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”.
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…
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
Hola, como cambiaste eso?
gracias, saludos
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
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
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.
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…
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.
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:
pues n aparece el codigo corregido, escribilo o ayudame a corregirlo.
saludos
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
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
me gusto el consejo muy bueno y sirve lo estoy poniendo en practica y que los conocimientos se compartanr
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
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
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.
che wlannot no me sensures el codigo que ahí esta la papa!!!!
no tienes para descargar la web? seria de mucha ayuda
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
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
Gracias, me sacaron de un apuro. Saludos
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
FallOutBoy, chequea que no exista ningun espacio antes de la etiqueta
Solucionado! ^^ Se me olvido codear el inicio de session, ya va. Gracias!
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.
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
ahhh!, por fin. Ese era el error.
Muchas gracias por tu ayuda.
Respuesta de Oro….
Gracias..!!!
seeeee………..Gracias man…!!!
mil gracias la verdad como un enter soluciona todo gracias
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
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
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!!!
Esta muy bien explicado.Me sirvio de mucho.
Gracias..
Muy buen articulo justo lo que se necesita para apender a usar sessiones
Muchas Gracias por el aporte
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.
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!!!
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í.
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
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.
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
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
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.
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
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
Ou gracias!…es lo que necesitaba para mi sistema…cada vex haciendo un mejor codigo, yies!
excelente articulo , muy consiso , siga y continua aporetanndo conociemiento
y si quiero poner varios usuarios con distintas claves redireccionados a distintos archivos “aplicacion.php”???
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…
fijate mi pana yo solo hago el login pero no me muestra nada es como si no me llevara a la autenticacion
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!!
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 !
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
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!!!!!! 🙂
gracias funciona muy bien
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
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
No me funciona el codigo, del el usuario y la contraseña no pasa
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???
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?
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.
Autenticación
<?php
echo"
Datos de tu cuenta
USUARIO
CONTRASEÑA
“;
?>
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”;
?>
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
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!!!
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!!!.
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”
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.
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
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
El problema mio es que yo tengo 2 radiobutton admin y usuario, no se como lograr que me funcionen independientemente