dominios y alojamiento web en hostalia

Control de los datos de autentificación en PHP

19 de diciembre de 2002
Valoración del artículo:
Aquí veremos si los datos de autentificación son correctos y dependiendo de si lo son o no, se redirigirá al navegador a la aplicación segura o al formulario inicial, respectivamente.
Atención: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright.
Esta página será encargada de decidir si los datos de configuración son correctos y actuar en consecuencia. Dependiendo del nivel de seguridad que queramos aplicar a nuestra aplicación, esta página será más o menos complicada.

En un principio no deseo liar mucho las cosas, así que explicaré una versión muy reducida de este archivo de control, en la que se comprueba si el usuario y contraseña sean dos valores específicos. Esto tiene la desventaja que sólo podemos crear un usuario/contraseña distinto y no un sistema que permita muchos usuarios distintos. Bueno, en realidad si que permitirá que accedan muchos usuarios a la vez, pero utilizando todos el mismo nombre de usuario y contraseña.

En aplicaciones más avanzadas podríamos tener en una base de datos una lista de usuarios con sus contraseñas. Entonces, en este archivo de control deberíamos hacer una búsqueda para ver si existe una correspondencia en la base de datos de ese usuario con esa contraseña. Esto lo veremos en adelante, ahora nos quedamos con la versión reducida.

Después de la comprobación podrán pasar dos cosas:
Si los datos son correctos, definirá una variables de sesión que servirá para saber que ese visitante ha sido validado correctamente y tiene permiso para acceder a la aplicación. Además redireccionará al visitante a la página de la aplicación restringida.
Si el usuario/contraseña no era correcto, se envía al navegador a la página de inicio pasando la variable errorusuario=si, que indica que ha habido un error en la autentificación.

El código se puede ver a continuación:

<?
//vemos si el usuario y contraseña es váildo
if ($_POST["usuario"]=="miguel" && $_POST["contrasena"]=="qwerty"){
    //usuario y contraseña válidos
    //defino una sesion y guardo datos
    session_start();
    $_SESSION["autentificado"]= "SI";
    header ("Location: aplicacion.php");
}else {
    //si no existe le mando otra vez a la portada
    header("Location: index.php?errorusuario=si");
}
?>


Referencia: Dos enlaces a documentación relacionada en nuestro manual de Programación en PHP:

Aprender el uso de sesiones http://www.desarrolloweb.com/articulos/320.php?manual=12

Aprender el paso de variables por formulario http://www.desarrolloweb.com/articulos/318.php?manual=12

Compartir en redes sociales

Comentarios
Fueron enviados 43 comentarios al artículo
30 comentarios no revisados
13 comentarios revisados:
Por: freddy nunez
11/12/2003
saludos, he puesto en practica este script y funciona pero:
1.la pagina protegida con clave a la q se desea accesar, una vez hecho esto, se ve la direccion en la barra de direcciones. por lo tanto , uno puede puentear , e irse de frente a esa direccion y pasar por alto el password y el usuario.
como solucionan este problema

RESPUESTA

Aunque escribas la dirección de la página directamente en tu navegador, no podrás acceder al contenido de acceso restringido, puesto que el sistema comprueba si se ha realizado la autenticación del usuario a través comprobar si realmente existen las variables de sesión que se deben de crear en la página de acceso.

De modo que, si no accedes pasando por la página de acceso, no se crearán las correspondientes variables de sesión y no podrás acceder a la página restringida. gracias

Por: Marc0s
14/2/2004
Tal vez lo mejor sea incluir todo dentro de un directorio, menos los dos archivos php index.php y el de comprobacion del usuario. Ese directorio lo podemos proteger despues (modificando el archivo de configuracion correspondiente).
Por: Pablo
24/2/2004
Me aparece el siguiente error: Warning: session_start(): open(/tmp\sess_196f11545b1b5bcbe29cb6d206b97bf1, O_RDWR) failed: No such file or directory (2) in D:\www\Test\control.php on line 6 Alguien me puede ayudar????

RESPUESTA

Te has fijado si el directorio ese, en el que intenta escribir información PHP está creado y con permisos de escritura? Es decir, tienes creado el directorio tmp?

Por: fasp
12/3/2004
pues existen muchas formas para evitar "puentear", pero la que yo haria seria la de usar POST en vez de GET en la forma de la 1era pagina en <form method="POST">....</form> de esta forma se esconde los datos a pasar pa otra pagina, pero pues lo mejor seria algun tipo de encriptamiento.

Y ya entrados en el tema y viendo que a ti si te funciono el script, a mi me marca un error en la 1era pagina (index.php), dice ke la variable "errorusuario" no ha sido declarada, como soluciono esto?, no es nada mas declarla debe de haber algo mas.
Por: Andrés
27/5/2004
Muy bueno el artículo! Sólo quiero comentar un detalle: si el usuario no tiene las coockies habilitadas en su navegador, no funciona. Para solucionarlo, en el header que redirecciona a aplicacion.php hay que propagar el identificador de sesion. Sería algo como esto:
header ("Location: aplicacion.php".SID);
}else {
    //si no existe le mando otra vez a la portada
    header("Location: index.php?errorusuario=si");
}
Saludos y gracias por compartir sus conocimientos.
Por: Andres
27/5/2004
Correccion: en el comentario que hice antes, el codigo correcto para propagar el SID es el sigte:
header ("Location: aplicacion.php?".SID);
(Me faltaba el '?').
Un saludo.
Por: Alfonso Flores Honores
13/7/2004
El articulo esta excelentey funciona a las mil maravillas, con la excepción que no trabaja cuando el register_globals esta en OFF ...alguien sabe como corregir esto
Por: Halcon
12/7/2005
Leia por ahi por artes del destino en su foro, si meten ésto en la cabecera antes de aplicacion.php o en cualquier archivo php que deseen que el usuario visualice solo si está autentificado, evitan que si escriben en la url del navegador se visualice el archivo, si el usuario no está autentificado en la session redirecciona a index.php

<?php
session_start();
if ($_SESSION["autentificado"]!="SI") {
header("Location: index.php");
}
?>
Por: Dani Alonso
09/3/2006
De esta forma podreis crear más usuarios:

<?
//Forummed
if ($_POST["usuario"]=="pedro" && $_POST["contrasena"]=="123"){
//usuario y contraseña válidos
//defino una sesion y guardo datos
session_start();
$_SESSION["autentificado"]= "SI";
header ("Location: priv_fm159r3.php");
//Styl Computer
}elseif ($_POST["usuario"]=="dani" && $_POST["contrasena"]=="456"){
//usuario y contraseña válidos
//defino una sesion y guardo datos
session_start();
$_SESSION["autentificado"]= "SI";
header ("Location: priv_st196w1.php");
//Otra tienda
}elseif ($_POST["usuario"]=="laura" && $_POST["contrasena"]=="789"){
//usuario y contraseña válidos
//defino una sesion y guardo datos
session_start();
$_SESSION["autentificado"]= "SI";
header ("Location: priv_yt966z3.php");
}
elseif ($_POST["usuario"]=="pedro" && $_POST["contrasena"]=="159"){
//usuario y contraseña válidos
//defino una sesion y guardo datos
session_start();
$_SESSION["autentificado"]= "SI";
header ("Location: priv_fm159r3.php");
}else {
//si no existe le mando otra vez a la portada
header("Location: index.php?errorusuario=si");
}
?>

lex85
ayuda!!!
28/4/2009
q tal, bueno yo apens me estoy iniciando en php con mysql, he hecho lo que he leido en el manual o articulo, primero lo estoy haciendo de forma sencilla donde yo escribi el usuario en codigo y le doy acceso con el if, hago lo q el codigo dice tanto en index.php control.php y aplicacion php, al momento de llenar mi datos en el formulario le doy entrar pero me manda a la pagina de control y no hace nada todo en blanco no me manda a mi pagina de aplicacion.php o si meto datos erroneos tampoco me dice que esta mal, si alguien pudiera saber q pasa agradesco su ayuda..

mientras seguire intentando

rojeda
problema
16/9/2010
que sucede si alguien conoce como se nombra la variable de session y realiza un script asignándole los valores correctos a esta variable? de esta manera puede entrar en cualquier página de nuestro sitio
además de encriptar la clave y hacer este trabajo con sesiones que más podemos hacer para evitar entradas no autorizadas?
Sugerencia
21/9/2010
Buenas , este será mi primer comentario. El script está muy bueno y supongo que que hasta donde va es para principiantes, sin embargo, permitanme sugerir codificar sólo lo necesario. Me refiero al hecho de crear una varible de sesión como $_SESSION["validado"] = "SI", lo digo por lo siguiente, usualmente en una aplicación necesitarás saber quien se ha autenticado, asi pues luego de comprobar que los datos de accesos son correctos, me conectaría a la BD y creo una variable con el ID del usuario por ejemplo, con esto me basta para saber que ya ha iniciaco sesión alguien registrado. Pienso que agregarle "Autenticado" sería redundar, cosa que no es bien vista o no existe en la filosofía DRY. Obviamente veo que el script apenas empieza y no se conecta a la BD aún, pero veo que la sugerencia es necesaria.
Saludos.

eduardo...
autenticacion automatica
13/1/2011
Hola como estan, leyendo el articulo observo que puede adecuarse a un desarrollo que estoy haciendo.
Tengo un directorio protegido por contraseña por .htaccess y necesito ejecutar una pagina de dicho directorio sin que solicite pagina de login, es decir necesito pasarle los parametros desde un PHP anterior.

A ver si me explico, el usuario ingresa al index y selecciona la opcion ventas luego toma el control el ventas.php que redirecciona a la pagina necesaria que se encuentra en el directorio protegido , ahi sale la pantalla de login.
Necesito saber como hacer para que el ventas.php llame a la pagina del directorio protegido sin que solicite el usuario y la password. O otra seria autenticarme antes en dicho directorio asi cuando llamo al php ya tengo los permisos.

Se entiende? Alguien se le ocurre como hacerlo?
Muchisimas gracias por su colaboracion en este sitio que es de gran interes

Manuales relacionados
Categorias relacionadas
El autor
Lectura recomendada
Compra este libro en Agapea, la librería urgente a domicilio.
Últimas noticias
Donaciones
Si piensas que te hemos ayudado y merecemos tu apoyo económico...