En este tutorial desarrollaremos y explicaremos un sistema de autentificacion de usuarios, este tipo de sistemas se utilizan para limitar el acceso a ciertas paginas de nuestro sitio Web.
1. Preparando una tabla en MySQL
Vamos a comenzar preparando una tabla en nuestra base de datos, la cual almacenara la información de los usuarios, para crear la tabla simplemente copia y ejecuta la siguiente consulta SQL:
CREATE TABLE `usuarios` (
`idusuario` INT(11) NOT NULL AUTO_INCREMENT,
`usuario` VARCHAR(20) NOT NULL,
`password` VARCHAR(10) NOT NULL,
PRIMARY KEY (`idusuario`)
)
2. Conectando a MySQL en PHP
Ya una vez que tengamos la estructura de nuestra tabla, creamos un archivo llamado conexion.php.
<?php
// datos para la coneccion a mysql
define('DB_SERVER','localhost');
define('DB_NAME','TU_BASE_DE_DATOS');
define('DB_USER','TU_USUARIO');
define('DB_PASS','TU_CLAVE');
La funcion define como su nombre lo dice, se usa para definir una constante nominada, que nos permite almacenar valores escalares(string, integer, float, boolean y nulos).
$con = mysql_connect(DB_SERVER,DB_USER,DB_PASS);
mysql_select_db(DB_NAME,$con);
?>
La función de mysql_connect nos servira para abrir una conexión al servidor de MySQL usando los 3 parámetros que declaramos anteriormente. Luego mysql_select_db selecciona la base de datos usando 2 parámetros, el nombre de la base de datos y la conexión a usar.
Código completo
<?php
// datos para la conexion a mysql
define('DB_SERVER','localhost');
define('DB_NAME','TU_BASE_DE_DATOS');
define('DB_USER','TU_USUARIO');
define('DB_PASS','TU_CLAVE');
$con = mysql_connect(DB_SERVER,DB_USER,DB_PASS);
mysql_select_db(DB_NAME,$con);
?>
3. logout.php
Creamos un archivo que se llame logout.php para que realice el cierre de sesión.
<?php
session_start();
session_destroy();
header('location: index.php');
?>
La funcion de session_destroy() destruye toda la información registrada de una variable de sesión, luego el header(‘location: index.php’) redireccionara al usuario al index.php
4. index.php
Ahora pasamos el archivo index.php, el cual contendrá el formulario de login y al mismo tiempo el mensaje de bienvenida o de error.
<?php
session_start();
include_once "conexion.php";
session_start() crea una sesión para ser usada mediante una petición GET o POST, o pasado por una cookie y la sentencia include_once es la usaremos para incluir el archivo de conexión a la base de datos que creamos anteriormente.
Función verificar_login()
Vamos a crear una función llamada verificar_login, esta se encargara de hacer una consulta a la base de datos para saber si el usuario ingresado es correcto o no.
function verificar_login($user, $password, $result) {
$sql = "SELECT * FROM usuarios WHERE usuario='$user' and password='$password'";
$rec = mysql_query($sql);
$count = 0;
while($row = mysql_fetch_object($rec))
{
$count++;
$result = $row;
}
if($count == 1)
{
return 1;
}
else
{
return 0;
}
}
Luego haremos una serie de condicionales que identificaran el momento en el boton de login es presionado y cuando este sea presionado llamaremos a la función verificar_login() pasandole los parámetros ingresados:
if(!isset($_SESSION['userid']))
{
if(isset($_POST['login']))
{
if(verificar_login($_POST['user'],$_POST['password'],$result) == 1)
{
$_SESSION['userid'] = $result->idusuario;
header("location:index.php");
}
else
{
echo '<div class="error">Su usuario es incorrecto, intente nuevamente.</div>';
}
}
?>
<form action="" method="post" class="login">
<div><label>Username</label><input name="user" type="text" ></div>
<div><label>Password</label><input name="password" type="password"></div>
<div><input name="login" type="submit" value="login"></div>
</form>
<?php
} else {
echo 'Su usuario ingreso correctamente.';
echo '<a href="logout.php">Logout</a>';
}
?>
- Linea 1: La primera condición es para saber si existe o no ya la variable de sesión que se va a crear cuando el usuario se logee
- Linea 3: Si la primera condición no pasa, haremos otra preguntando si el boton de login fue presionado
- Linea 5: Si el boton fue presionado llamamos a la función verificar_login() dentro de otra condición preguntando si resulta verdadero y le pasamos los valores ingresados como parámetros.
- Linea 7 y 8: Si el login fue correcto, registramos la variable de sesión y al mismo tiempo refrescamos la pagina index.php.
- Linea 12: Si la función verificar_login() no pasa, que se muestre un mensaje de error.
- Linea 22: Si la variable de sesión ‘userid’ ya existe, que muestre el mensaje de saludo.
Decoración opcional con CSS
Esta parte es opcional ya que no influye en nada en el funcionamiento del sistema, es unicamente decorativa:
* {
font-size: 14px;
font-family: sans-serif;
}
form.login {
background: none repeat scroll 0 0 #F1F1F1;
border: 1px solid #DDDDDD;
margin: 0 auto;
padding: 20px;
width: 278px;
}
form.login div {
margin-bottom: 15px;
overflow: hidden;
}
form.login div label {
display: block;
float: left;
line-height: 25px;
}
form.login div input[type="text"],
form.login div input[type="password"] {
border: 1px solid #DCDCDC;
float: right;
padding: 4px;
}
form.login div input[type="submit"] {
background: none repeat scroll 0 0 #DEDEDE;
border: 1px solid #C6C6C6;
float: right;
font-weight: bold;
padding: 4px 20px;
}
.error {
color: red;
font-weight: bold;
margin: 10px;
text-align: center;
}
Código completo
<?php
session_start();
include_once "conexion.php";
function verificar_login($user,$password,&$result) {
$sql = "SELECT * FROM usuarios WHERE usuario = '$user' and password = '$password'";
$rec = mysql_query($sql);
$count = 0;
while($row = mysql_fetch_object($rec))
{
$count++;
$result = $row;
}
if($count == 1)
{
return 1;
}
else
{
return 0;
}
}
if(!isset($_SESSION['userid']))
{
if(isset($_POST['login']))
{
if(verificar_login($_POST['user'],$_POST['password'],$result) == 1)
{
$_SESSION['userid'] = $result->idusuario;
header("location:index.php");
}
else
{
echo '<div class="error">Su usuario es incorrecto, intente nuevamente.</div>';
}
}
?>
<style type="text/css">
*{
font-size: 14px;
}
form.login {
background: none repeat scroll 0 0 #F1F1F1;
border: 1px solid #DDDDDD;
font-family: sans-serif;
margin: 0 auto;
padding: 20px;
width: 278px;
}
form.login div {
margin-bottom: 15px;
overflow: hidden;
}
form.login div label {
display: block;
float: left;
line-height: 25px;
}
form.login div input[type="text"], form.login div input[type="password"] {
border: 1px solid #DCDCDC;
float: right;
padding: 4px;
}
form.login div input[type="submit"] {
background: none repeat scroll 0 0 #DEDEDE;
border: 1px solid #C6C6C6;
float: right;
font-weight: bold;
padding: 4px 20px;
}
.error{
color: red;
font-weight: bold;
margin: 10px;
text-align: center;
}
</style>
<form action="" method="post" class="login">
<div><label>Username</label><input name="user" type="text" ></div>
<div><label>Password</label><input name="password" type="password"></div>
<div><input name="login" type="submit" value="login"></div>
</form>
<?php
} else {
echo 'Su usuario ingreso correctamente.';
echo '<a href="logout.php">Logout</a>';
}
?>
Y con esto terminamos el nuestro sistema de login en PHP.
Carlos dice
Esta muy bueno el tutorial, saludos!
Luis dice
Bueno mira e creado un login con este codigo.
if(!session_is_registered(username) && !empty($_POST[‘mf-username’]) && !empty($_POST[‘mf-password’]))
{
$login_username = MFText($_POST[‘mf-username’]);
$login_password = Core::MFHash(MFText($_POST[‘mf-password’]), $login_username);
$checking = mysql_query(«SELECT * FROM users WHERE username = ‘».$login_username.»‘ AND password = ‘».$login_password.»‘ LIMIT 1″) or die(mysql_error());
/*Desactive el Error del login por unos momentos.
$errorLogin =’¡Nombre de usuario o contarseña incorrectos! Asegurate de que esten bienX
‘;
*/
$user_exist = mysql_num_rows($checking);
if($user_exist > 0)
{
$_SESSION[‘username’] = $login_username;
$_SESSION[‘password’] = $login_password;
$cotinue_login = true;
}
}
if(!empty($_SESSION[‘username’]) || $continue_login == true)
{
$login_username = MFText($_SESSION[‘username’]);
$login_password = MFText($_SESSION[‘password’]);
$checking = mysql_query(«SELECT * FROM users WHERE username = ‘».$login_username.»‘ AND password = ‘».$login_password.»‘ LIMIT 1″) or die(mysql_error());
$user_exist = mysql_num_rows($checking);
if($user_exist > 0)
{
$My = mysql_fetch_assoc($checking);
define(«My_ID», $My[‘id’]);
define(«My_Name», $My[‘username’]);
define(«My_Credits», $My[‘credits’]);
define(«My_Motto», $My[‘motto’]);
define(«My_Rank», $My[‘rank’]);
define(«My_Habbo», $My[‘habbo_name’]);
define(«My_Email», $My[‘email’]);
mysql_query(«UPDATE users SET online = ‘».time().»‘ WHERE id = ‘».$My[‘id’].»‘ LIMIT 1″) or die(mysql_error());
define(«MF_USER_ON», TRUE);
}
else
{
define(«My_ID», 0);
define(«My_Username», «Visitante»);
define(«My_Rank», 0);
define(«MF_USER_ON», FALSE);
}
}
else
{
define(«My_ID», 0);
define(«My_Name», «Visitante»);
define(«My_Rank», 0);
define(«MF_USER_ON», FALSE);
}
Y quisiera saber como le pongo un sistema de baneo.
Si me pudieran ayudar .
Agregenme lmcd@hotmail.es
willyams dice
Me he descargado el código y arroja éste error.
Falla en la límea 12: while($row = mysql_fetch_object($rec))
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /homepages/23/d363077467/htdocs/MIDOMINIO/index.php on line 12
Su usuario es incorrecto, intente nuevamente.
Un saludo
diego dice
OJO HAY UN ERROR YA LO IDENTIFIQUE Y YA SIRVE ¡¡¡¡
Resulta que en la linea 8 del archivo index php el programador coloco
$sql = “SELECT * FROM usuario WHERE usuario = ‘$user’ and clave = ‘$password’”;
el error esta aqui en la palabra CLAVE , por que en el formulario el nombre del campo password es ese mismo paswsword y no clave entonces la linea de codigo correcta que reemplazaria esta es
$sql = “SELECT * FROM usuarios WHERE usuario = ‘$user’ and ‘$password’ = ‘$password’”;
Por eso es que arroja algunos errores.
Patricia dice
Muy bueno el tutorial me fue de gran ayuda … mucha gracias..
Rayooh dice
y donde esta el registro?
Edwind Pineda dice
Ese solo es un formulario de logeo, en un futuro muy cercano vamos a hacer un tutorial de registro y logeo 🙂
Rayooh dice
Llegó el Registro?…. Ya estamos en 22 de Diciembre ya fue 3 Días.o 4 o una Semana 😀
MAFUCLERO dice
Una consulta para conectarse un bd de sqlserver se puede lo intentado con la clase de pdo pero no me aparece el driver hay un manera de solucioncarlo con el driver mssql del pdo
Hash dice
Intenta escribir mejor
OMAR AQUINO dice
Saludos Camarada:
Estoy tratando de correr este Tutorial, sinembargo me da este error:
Fatal error: Call to undefined function import_request_variables() in C:\Archivos de programa\EasyPHP-5.4.0beta2\www\pruebas1\logeo\index.php on line 5
El contenido de la linea 5 es el siguiente:
import_request_variables(«GP», «»);
Si puede hacer algo por este humilde aspirante a programador, seguramente la humanidad se lo agradecerá y si no lo hace [la humanidad] puede jurarlo que yo si se lo agradeceré
http:rrrrregimenchavista.blogspot.com
Edwind Pineda dice
Tienes la versión de PHP muy antigua, actualizate a la versión 6 de PHP 😛
omar Aquino dice
¡ Cúmplase ¡ Voy a eso.
Gracias.-
rrrrregimenchavista.blogspot.com
Omar dice
Gracias por el aporte, muy bien… a probar!
leonardo dice
una duda pero esto es solamente para un admin es decir si varias personas quieren entrar con su login y su pass se podra hacer? porque al ver el ejemplo hecho solo admite admin bueno eso seria mi pregunta espero que la puenda nrespinder a brevedad gracias
diego dice
OJO HAY UN ERROR YA LO IDENTIFIQUE Y YA SIRVE ¡¡¡¡
Resulta que en la linea 8 del archivo index php el programador coloco
$sql = «SELECT * FROM usuario WHERE usuario = ‘$user’ and clave = ‘$password'»;
el error esta aqui en la palabra CLAVE , por que en el formulario el nombre del campo password es ese mismo paswsword y no clave entonces la linea de codigo correcta que reemplazaria esta es
$sql = «SELECT * FROM usuarios WHERE usuario = ‘$user’ and ‘$password’ = ‘$password'»;
Por eso es que arroja algunos errores.
Edwind Pineda dice
Gracias, ya esta corregido.
Matias dice
Hola diego.
En la segunda consulta comparas la variable $password con la misma cuando haces usuario = ‘$user’ and ‘$password’ = ‘$password’… Supongamos que te logueas como pepito y la contraseña 1234, la consulta sera
$sql = “SELECT * FROM usuarios WHERE usuario = ‘pepito’ and ‘1234’ = ‘1234’”;
De esa forma estas comprobando solamente el usuario independientemente de la contraseña que pongamos.
La consulta correcta según la estructura de la tabla planteada arriba seria:
$sql = “SELECT * FROM usuarios WHERE usuario = ‘$user’ and password = ‘$password’”;
Saludos.
diego dice
OTRO ERROR QUE SE ME OLVIDO COLOCAR ESTA EN LA MISMA LINEA EL COLOCO $sql = «SELECT * FROM usuario WHERE usuario = ‘$user’ and clave = ‘$password'»;
Y RESULTA QUE DESPUES DE LA CONSULTA DE FROM VA ES LA PALABRA USUARIOS POR QUE LA TABLA SE LLAMA USUARIOS Y NO USUARIO COMO EL COLOCO, RECORDEMOS QUE DESPUES DE LA EXPRESION FROM VA EL NOMBRE DE LA TABLA Y SI VEMOS EL COMIENZO DEL TUTORIAL LA TABLA SE LLAMA ES USUARIOS Y NO USUARIO COMO ESTA EN EL CODIGO
diego dice
AHORA EL ERROR A CORREGIR ES QUE CUANDO INGRESO UN USUARIO REGISTRADO EN LA BD ME ENTRE CON CUALQUIER CLAVE…AYY DIOS…
brayan dice
Warning: mysql_connect() [function.mysql-connect]: Access denied for user ‘TU_USUARIO’@’localhost’ (using password: YES) in W:\var\www\conexion.php on line 7
Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in W:\var\www\conexion.php on line 8
me pueden ayudar.. porque me sale este error?
Edwind Pineda dice
NO estas seleccionando bien la base de datos, has puesto mal el nombre o la clave.
saludos
Nicolas dice
Cuante gente ansiosa…deberían repasar el código o releer antes de patalear…
Muy buen tutorial, gracias como siempre.
Edwind Pineda dice
gracias Nicolas
luis dice
hola tu codigo me vota un error coloco el usuario y contraseña y me sale usuario no registrado que pasa
mohamad dice
Gran trabajo muy buen tutorial, pero tengo un problemilla al loguearme tengo que darle dos veces al boton login para que me aparezca el mensaje de bienvenida.
alex dice
gran tutorial pero mi pregunta com puedes despues de logearce conservar los datos del tipo que se logio onda como face que tras y sales del perfil de jente pero siempre es tu cuenta ?
pd:felizidades exelente aporte
Claudio dice
Como lo hago en caso que desee redireccionar a distintos «portales» a los usuarios ingresados en la tabla.. por ejemplo tengo un usuario con permiso nivel 1 que vendría siendo el admin, lógicamente el admin tiene permiso de acceso a toda la aplicación web que el php seria algo como «sesionadmin.php» y tengo otro usuario de nivel 3 que serian los operadores de ingres , etc ,etc pero no tienen permiso a toda la información el php seria como «sesionoperaria.php» (por dar ejemplos burdos)
Como podría yo aplicar esta condición a que la query me retorne el numero de permiso y en base a eso autentificar y redireccionar? llevo un par de horas tratando de resolver este problema y no encuentro solución, me imagino que seria fácil pero no soy experto en el lenguaje
Claudio dice
ah mi tabla en phpMyAdmin esta de la siguiente manera
CREATE TABLE `usuarios` (
`idusuario` INT(11) NOT NULL AUTO_INCREMENT,
`usuario` VARCHAR(20) NOT NULL,
`password` VARCHAR(10) NOT NULL,
`permiso` INT (2) NOT NULL,
PRIMARY KEY (`idusuario`)
)
Cristobal de Leon dice
Como le hago para que las paginas que siguen después del índex sigan protegidas… ya que si escribes directamente la direccion si te deja entrar a las paginas…
no se si me explico
saludos.. muchas gracias por la ayuda
Edwind Pineda dice
Usando un if y isset para ver si existe la variable de sesión que creaste para el el usuario
Cristian dice
Y como sería? Gracias.
Edwind Pineda dice
if(isset($_SESSION[‘userid’]))
{
// muestra contenido cuando existe la variable de sesion
}
luis dice
Amigo buenos dias estoy creando un programa o una base de datos para registros, mi problema es, que los datos aparecen en la base de datos, pero quisiera que se reflejaran tambien, visualizarlos en una tabla como hago.te agradeceria si tienes un modelo que me puedas facilitar por lo meno que refleje las tablas con la informacion,
Nombre dice
Cuando logeo el usuario y la pass correcta, en index.php me repite de nuevo el formulario.
La pregunta es. ¿como hago para que el contendido de una pagina llamada gratis.html solo sea accesible a quien se logee correctamente’
Gracias por el esfuerzo y enhorabuena por lo didactico
Josue Ochoa dice
La pagina gratis tendria que ser PHP no HTML e incluirle una condicional alli.
aaron dice
hola que tal.. mira tengo una pequeña duda,, la verdad soy nuevo en php y no logro entender que hace el contador.. ahh y otra duda…..quisiera que cuando inicie la sesion.. pueda mantener la sesion en varias paginas… con mi mismo usuario… 🙂 .. gracias..
Diego dice
A partir del PHP 5.4 el «import_request_variables» quedó obsoleto, por lo tanto tira error, alguna solución?
Alex dice
hola amigo un favor me podrías ayudar con este error «Parse error: syntax error, unexpected $end in C:\xampp\xampp\htdocs\logeo\index.php on line 57»
Edwind Pineda dice
que hay en la linea 57 de tu archivo?
luis dice
edwin, me puedes explicar porque cuando agrego un usuario y entro, entro correctamente, pero cuando agrego otro me dice qu el usuario no esta registrado porque ayudame plis
Jonathan dice
Hola en el Error“Parse error: syntax error, unexpected $end in C:\xampp\xampp\htdocs\logeo\index.php on line 57″, desde la linea 50 a la 57 que esta escrito asi:
<?
}
else
{
echo 'Su usuario ingreso correctamente.';
echo 'Logout‘;
}
?>
deberia estar escrito asi:
<?php
}
else
{
echo 'Su usuario ingreso correctamente.';
echo 'Logout‘;
}
?>
A mi me salio ese error y lo repare asi…
Saludos
Diego Arce dice
Hola Amigo Quisiera Q Me Ayudaras Con Este Error Lo Descrague De Aqui Pero No Se Q Pasa Con Este Erroor
Notice: Use of undefined constant usuarios – assumed ‘usuarios’ in C:\wamp\www\logeo\conexion.php on line 10
Muchas Gracias Brooo
Diego Arce dice
Ya Arregle el Error de Arriba Ahora Me Pasa Es Esto
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in C:\wamp\www\Login2\index.php on line 12
Un Error con El Vector Q Pasara???? Amigo Ayudame Necesito Esto Urgente
nicolas dice
Algo tenés mal en el archivo index.php on line 12, publica es linea para poder ver el error, pero seguramente la consulta mysql no te esta dando un valor correcto.
Diego Arce dice
Amigo Esta Es La Linea 12 La Q Me Genera El Error
while($row = mysql_fetch_object($rec))
Aqui Te Envio Con La Parte Dond Esta La Consulta Gracias Saludos
function verificar_login($user,$password,&$result)
{
$sql = «SELECT * FROM usuarios WHERE usuario = $user’ and password = ‘$password'»;
$rec = mysql_query($sql);
$count = 0;
while($row = mysql_fetch_object($rec))
{
$count++;
$result = $row;
}
Diego Arce dice
En La Parte de La Consulta Me Falto La Comilla Simple Despues Del WHERE Usuario = ‘$user’
Diego Arce dice
Listo Por Fin Me Dio Gracias Por El Codigo Muy bueno
Buenos Post Felicitaciones Gracias Saludos
KEVYN dice
Me da este Error
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in C:\Program Files\EasyPHP-12.1\www\prueba\index.php on line 11
ESTA ES LA PARTE DEL CODIGO DONDE ME TIRA EL ERROR:
function verificar_login($user,$password,&$result)
{
$sql = «SELECT * FROM usuarios WHERE usuario = ‘$user’ and password = ‘$password'»;
$rec = mysql_query($sql);
$count = 0;
while($row = mysql_fetch_object($rec)) // ESTA ES LA LINEA 11
{
$count++;
$result = $row;
}
if($count == 1)
{
return 1;
}
else
{
return 0;
}
}
Carlos dice
Muchas Gracias Por el Tutorial ! Me ha sido de mucha utilidad! 😀
nisa dice
gracias 🙂
Alejandro dice
y si quiero comprobar una contraseña que este en md5?
Nicolás dice
http://php.net/manual/es/function.md5.php
cuidado: Dada la velocidad de este algoritmo de hash, se recomienda no utilizar esta función para proteger las contraeñas
Y tambien es conveniente encriptarlas antes de enviarlas al servidor para protegerlas de terceros.
http://www.manualdephp.com/codigos-php/encriptar-contrasenas-md5-php.html
luis dice
Su usuario es incorrecto, intente nuevamente. no entiendo porque me sale eso si estoy registarddo ayuadme porfa
Pablo dice
A mi me aparece error en la linea 10
Pablo dice
y no se como resolverlo
nicolas dice
En la linea 10 de que archivo? podés publicar el error que tenés?
lalo dice
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\cajeros\2\logeo\index.php on line 11
como kito el error
lalo dice
estoy tabajando con oracle
Formula 1D dice
Hola, no comprendo donde y como hay que poner eso, si es con algún programa o simplemente poniéndolo en el bloc de notas y guardándolo en archivo .php pero, lo que mas me interesa saber es, ¿donde y como tengo que poner eso?
Ayuda por favor =D
Josue Ochoa dice
Tienes que aprender lo basico de PHP primero 🙂
GUIMY dice
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\cajeros\2\logeo\index.php on line 11
NADIE RESPONDE PORQ SALE ESTE ·@%& ERROR????
Nicolás dice
Hola, para ver el error pegá la linea 11 del archivo index.php
Y evitemos las mayúsculas.
Saludos.
GUIMY dice
NICOLAS
<?php
session_start();
include_once "conexion.php";
function verificar_login($user,$password,&$result)
{
$sql = "SELECT * FROM usuarios WHERE usuarios = `$user` and password = `$password`";
$rec = mysql_query($sql);
$count = 0;
while($row = mysql_fetch_object($rec))
{
$count++;
$result = $row;
}
Josue Ochoa dice
Es simple, es un error con tu base de datos, revisa las tablas, los campos, fíjate que este todo correctamente definido.
Hugo dice
Hola me podrías pasar el código del index ya estructurado?? esque lo ejecuto y me aparece en el navegador en vez de el formulario todo el texto del código… Porfavor
mangeluz dice
Que tal muy bueno este tutorial fue de mucha ayuda, a mi no me da ningun error ni nada ya he revisado todo el codigo y el unico incoveniente que tengo es que no me da el mensaje de bienvenida, si no que regresa a la pantalla de logueo, cuando ingreso mal el usuario me da el resultado correcto de usuario incorrecto. Solo tengo ese inconveniente.
anonimo dice
Esta bien el sistema, pero deberias de filtar los datos que recibes con $_post{‘password’] ya que tienes una inyeccion sql y ademas tienes xss en la generacion de la cookie, esto se evita de varias formas:
htmlentities($_POST[‘password’]), esto hace que la ‘ se codifique con su caracter en html de tal forma que no se pueda jugar con » para hacer una injeccion SQL y el cross scripting lo evitas poniendo la cookie con la opcion httponly, de tal manera que no acepte cookies desde fuera del servidor.
anonimo dice
function verificar_login($user,$password,&$result) {
$password = mysql_real_escape_string($password);
Esta modificacion haria que fuera mas complicado de inyectar sql, si utilizas htmlentities, el problema es que no puedes usar simbolos en la contraseña, de esta manera se evita.
anonimo dice
aqui podeis ver como evitar el cross scripting y poder añadir una cookie de sesion para poder controlar el acceso de login :https://www.owasp.org/index.php/HttpOnly
Peter Concha Regatto (@PeterConchaR) dice
En IIS no funciona había una versión anterior a la actual esa si funcionaba la que implementaba una función que quedo en des uso.
Peter Concha Regatto (@PeterConchaR) dice
«En IIS no funciona había una versión anterior a la actual esa si funcionaba la que implementaba una función que quedo en des uso.»
Para ser exacto el demo que esta linkeado abajo no funciona en IIS y si en Apache mientras que el link de arriba si funciona en IIS y Apache.
Angelllo dice
hola, donde pongo este codigo?:
CREATE TABLE `usuarios` (
`idusuario` INT(11) NOT NULL AUTO_INCREMENT,
`usuario` VARCHAR(20) NOT NULL,
`password` VARCHAR(10) NOT NULL,
PRIMARY KEY (`idusuario`)
)
lo pongo en un archivo para que se cree automaticamente en php? o me voy al phpmyadmin y lo creo yo manualmente? gracias
Diego dice
gg
Diego dice
Ese código corresponde a la creación de la base de Datos en SQL debes ponerlo en servidor donde alojes la base de datos.
donde estarías creando una tabla que se llama : usuarios
campo : idusuario
campo : usuario
campo : password
Peter Concha Regatto (@PeterConchaR) dice
Angello debes poner ese código en la pestalla SQL de phpMyADmin y ejectutarlo para crear la tabla pero antes de crear la tabla debes crear la BD hay mismo revisa un tuto básico de BD MySQL con phpMyADmin te ayudara mucho 😉
Att @PeterConchaR
Microsoft Student Partner Lead Latam
Miembro Avanet Colombia
Mario Campos dice
Excelente Tutorial. Funciona a la perfeccción con la corrección.
Saludos
Pedrote dice
Hola,
no creo que se conveniente usar el driver mysql de php para conectarse a una base de datos. Es recomendable usar PDO y el driver mysqli.
Tampoco se «sanitiza» el texto que mete el usuario en el formulario, lo que puede provocar un ataque de inyección SQL y más si se emplea el driver mysql.
Un saludo
Josue Ochoa dice
Gracias por tu critica, el asunto es que este no es un tutorial avanzado y se busca usar las funciones mas básicas para el facil entendimiento, sin embargo vere que se puede hacer con el Autor para mejorar la seguridad.
pedro dice
Hola
muy bueno , todo funciona de maravilla… mis felicitaciones
pero Como oculto una pagina detras del login… osea, tengo una pagina que no quiero que se vea, sin logearse..
,como hago eso ??????
FireDark Jairo Espino Troncoso dice
Me podrias pasar tus archivos corregidos pedro,Esque ami me sigue generando errores
Florian dice
Hola pedro es muy facil simple la pagia o elementos que no quieras que se vean si no estas logeado haces simpemente esto:
Aqui le pones cosas para gente no ha inisiado sessión
Aqui van cosas para la gente que ha iniciado sessión
Espero haberte ayudado 🙂
Neo dice
No puedo poner la contraseña con MD5/SHA, en el registro.php tengo puesto esto:
$sql = «INSERT INTO usuarios (usuario,password) VALUES (‘$usuario’,SHA(‘$password’))»;
Que pongo en el index.php ??? para que me valide la password encriptada?
Edwind Pineda dice
no lo hagas dentro de la consulta de sql y haslo con md5
Franco dice
La linea 9 me da el siguiente error: Parse error: syntax error, unexpected ‘usuarios’ (T_STRING) in D:\wamp\www\app\admin.php on line 9
import_request_variables(«GP», «»);
function verificar_login($user,$password,&$result)
{
$sql = “SELECT * FROM usuarios WHERE usuario = ‘$user’ and password = ‘$contra’”; //Linea 9
$rec = mysql_query($sql);
$count = 0;
while($row = mysql_fetch_object($rec))
{
$count++;
$result = $row;
}
if($count == 1)
{
return 1;
}
else
{
return 0;
}
}
Edwind Pineda dice
fijate si tu tabla se llama «usuarios», seguro le has puesto otro nombre
carmen dice
Hola buen día, me sirvio mucho el codigo pero tengo una duda, al ingresar mi username y mi pass entra pero al ingresar de nuevo otra contraseña de todas formas me deja entrar y nde igual forma lo hace en tu demo que puedo hacer gracias
Juan dice
Tengo tres dudas: ¿como hago un formulario de registro?, ¿como hago una página privada para cada usuario? y ¿como hago una página de perfil del usuario?
LUIS dice
GRACIAS POR EL TUTORIAL, PARA AQUELLOS QUE ESTAMOS COMENZANDO ES DE GRAN AYUDA. LO IMPORTANTE DE ESTO ES EL GRAN APOYO QUE REPRESENTA EL DESARROLLO PASO A PASO COMO EL QUE REFLEJAS EN TU TRABAJO. EN ESTA MISMA LINEA RECOJO DOS POST A LOS QUE ME SUMO:
(1) pedro: «como oculto una pagina detras del login…(sic)
(2)Cristobal de Leon: » ¿Como le hago para que las paginas que siguen después del índex sigan protegidas»…(SIC)
tu respuesta fue:
if(isset($_SESSION[‘userid’]))
{
// muestra contenido cuando existe la variable de sesion
}
me imagino que esto va en la pag que quiero proteger con la sesion loggeada. y lo que va entre {} seria lo que quiero «ocultar de lo no loggeado»
nos sería muy util una parte 2 del tutorial con las especificaciones del que hacer una vez loggeado.
Nuevamente gracias
Fausto Meneses dice
Alguien me peude ayudar no se porque sale este error:
mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /home/u702527324/public_html/index.html/logeo/index.php on line 12
josueochoa dice
Es un problema de MySQL, revisa que tus conexiones y tu base de dates este correctamente estructurada.
vis97c dice
gracias todo funciono de maravilla pero quisiera saber si hay una forma de que me muestre en todo el resto de mi pagina web el usuario registrado obviamente depues de haber iniciado sesion
B Boy Saka dice
Disculpen pero yo tengo todo en la pagina en orden, mi problema es que registra bien, pero al ingresar ( login ) me da error ( Contraseña incorrecta ) ya que no es la misma la pongo directamente de la base de datos la contraseña hexadecimal (7110eda4d09e062aa5e4 )y si entra que puede ser eso?
Gaston Fontenla Nuñez dice
Hola ! muy buena la explicacion, pero me tira este error:
Warning: mysql_connect(): Access denied for user ‘u846516986_data’@’localhost’ (using password: YES) in /home/u846516986/public_html/conexion.php on line 7 Warning: mysql_select_db() expects parameter 2 to be resource, boolean given in /home/u846516986/public_html/conexion.php on line 8 Warning: mysql_query(): Access denied for user ‘root’@’localhost’ (using password: NO) in /home/u846516986/public_html/log.php on line 7 Warning: mysql_query(): A link to the server could not be established in /home/u846516986/public_html/log.php on line 7 Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /home/u846516986/public_html/log.php on line 10
Su usuario es incorrecto, intente nuevamente.
y cuando registro un usuario:
Warning: mysql_connect(): Access denied for user ‘u846516986_data’@’localhost’ (using password: YES) in /home/u846516986/public_html/conexion.php on line 7 Warning: mysql_select_db() expects parameter 2 to be resource, boolean given in /home/u846516986/public_html/conexion.php on line 8 Warning: mysql_query(): Access denied for user ‘root’@’localhost’ (using password: NO) in /home/u846516986/public_html/reg.php on line 13 Warning: mysql_query(): A link to the server could not be established in /home/u846516986/public_html/reg.php on line 13 Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /home/u846516986/public_html/reg.php on line 16 Warning: mysql_query(): Access denied for user ‘root’@’localhost’ (using password: NO) in /home/u846516986/public_html/reg.php on line 31 Warning: mysql_query(): A link to the server could not be established in /home/u846516986/public_html/reg.php on line 31 Usted se ha registrado correctamente.
Acá te dejo colgados en mi pendrive virtual los archivos que usé:
http://penweb.tuars.com/files/ARCHIVOS.rar
Gaston Fontenla Nuñez dice
en realidad, ninguna de las dos funciones me sirvieron, espero que me puedas ayudar.
josueochoa dice
Gaston, el error que te esta saliendo te lo dice explicitamente «Warning: mysql_connect(): Access denied for user», los datos de conexión a tu base de datos son incorrectos.
Gaston Fontenla Nuñez dice
entonces me conviene hacer la base de datos de nuevo?
Joss dice
Buenas me podrias ayudar a darle acceso a los usuarios por ejemplo que los que sean administradores vean todos los modulos los de menos de nivel vean ciertos modulos y asi pss.???
Makoto dice
deje un comentario arriba, donde puede servirte de guia
Eric Garza Gonzalez dice
Oie mira lo que pasa es lo siguiente, cree un login en mi servidor, pero al poner este login en la carpeta login2, me conecta con la tabla de el primer login, ¿como espesifico el nombre de la tabla a la que me conectare?, la tabla de este login le puse usuarios2
Miguel dice
hola, cuando edito en vista previa del explorador con front page me sale esto:
«idusuario; header(«location:index.php»); } else { echo ‘
Su usuario es incorrecto, intente nuevamente.»
Por favor ayuda
barrientos.stc@gmail.com
Luis Humberto Pérez Soto dice
hola pregunta como hago para que algunas paginas se muestren solo a los usuarios registrados con este codigo y si no estan registrados los envie a la pagian de logeo
Rhulk Horde dice
Encontraste la solucion luis?
Makoto dice
Buenos dias Luis y Rhulk, aqui despues de varias pruebas, logre encontrar una solucion:
function verificar_login($user,$password,&$result) {
$sql = «SELECT * FROM usuario_sistema WHERE dniUsuario = ‘$user’ and clave = ‘$password'»;
$rec = mysql_query($sql);
$perfil=0;
while($row=mysql_fetch_array($rec)){
$user = $row[0]; //dniUsuario
$password = $row[4];//clave
$perfil = $row[8]; //perfil
}
if($perfil == 1) //perfil de admin
{
return 1;
}
else if($perfil == 2) //perfil Operador
{
return 2;
}
else if($perfil == 3) //perfil Tecnico
{
return 3;
}
else
{
return 0;
}
}
if(!isset($_SESSION[‘userid’]))
{
if(isset($_POST[‘login’]))
{
$dniTecnico= $_POST[‘user’];
////////////////////SI ES ADMIN/////////////////////////////
if(verificar_login($_POST[‘user’],$_POST[‘password’],$result) == 1)
{
$_SESSION[‘userid’] = $result->idusuario;
header(«location:paginadelAdmin.php»);
}
////////////////////SI ES OPERADOR/////////////////////////////
else if(verificar_login($_POST[‘user’],$_POST[‘password’],$result) == 2)
{
$_SESSION[‘userid’] = $result->idusuario;
header(«location:PaginadelOperador.php»);
}
////////////////////SI ES TECNICO/////////////////////////////
////////////este es un plus con el cual puedes enviar una variable atravez del /////////////enlace hacia esa pagina 🙂 //////////////
else if(verificar_login($_POST[‘user’],$_POST[‘password’],$result) == 3)
{
$_SESSION[‘userid’] = $result->idusuario;
header(«location:PaginadelTecnico.php?mensaje=$VARIABLE»);
}
////////////////////SI NO TIENE PERFIL/////////////////////////////
else{
echo ‘Su usuario o contraseña son incorrectos, intente nuevamente.’;
}
}
//////////////////////////////////////////////////////////////////////////////////////////////
// eso es todo, espero esto pueda ayudarlos y si tienen alguna forma de aportar alguna mejora (de seguro que las hay), serán bien recibidas
juan dice
hola, es muy interesante esta solución para restringir accesos, pero perdón por la pregunta quizá no sea del todo muy inteligente, pero aun así la hago, jajaja, donde va este código. es que no he podido hacer que funcione bien. Les agradezco sus respuestas, mi correo es juan-g81@hotmail.com
pedrojasper dice
excelente mil felicitaciones
Jh Magno dice
Hola. Ha salido todo muy bien, sin embargo, quisiera saber si me pueden decir qué debo escribir para que aparezca el nombre del usuario en el index y en el resto de las subpáginas. Sé que es mucho pedir, pero en diferentes partes se dan diferentes soluciones. Pareciera como si los códigos php son como huellas digitales, porque todos son diferentes explicando la misma función.
Rhulk Horde dice
Gracias por el tutorial… la pena es que falte, como entrar en alguna pagina restringida mediante login y mantener la sesion de dicho login en toda la web.
Un saludo.
Juax dice
¿hay solucion para esto?: Parse error: syntax error, unexpected ‘<' in /home/u849876195/public_html/secure_account/register/index.php on line 5
josueochoa dice
El error te lo dice, revisa la linea 5 de index.php.
Kenny Diaz dice
Hola tengo un problema con un Codigo:
include(‘FoxCorp.php’);
$_SESSION[‘user’] = @mysql_fetch_assoc($b_user);
$b_user = mysql_query(«SELECT * FROM usuarios WHERE user = $_POST[user]»); echo $_SESSION[‘user’]
luego en la pagina de perfil me arroja este resultado:
Hola Notice: Undefined index: user in C:xampphtdocsperfil.php on line 113 Este es Tu Perfil
edotropic dice
al logear me sale esto =(
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /home/edotropi/public_html/vina/admin/index.php on line 12
y ese while es el que esta ahi
while($row = mysql_fetch_object($rec))
{
$count++;
$result = $row;
}
josueochoa dice
El problema no es el while, el problema es tu query a MySQL, revisa esa parte.
GE Team dice
Es buena idea usar un Framework para todas éstas tareas, por ejemplo http://ellislab.com/codeigniter .
Tito Cardenas dice
Tu sistema de login es muy bueno, pero como puedo hacer para que en vez de enviarme a la misma pagina index.php me envie a admin u usuario.php, si ya se que cambiando el header location, el problema es que cuando agrego la cookie de sesion, me sigue apareciendo lo de Su usuario ingreso correctamente. y no me envia a la pagina, gracias
Diego dice
Hola amigo, el código funciona muy bien me sirvió mucho, además quería preguntarte si sabes como hago para que al iniciar sesión, consulte los datos propios de ese usuario ejemplo:
me logueo con Juan15
campo INFORMACION: esta es la información asociada al usuario Juan15
Cierro sesión ..
me logueo con Andres20
campo INFORMACION: esta es la información asociada al usuario Andres20
Te agradecería si me dijeras como ! 🙂
Giber Abad dice
Estoy usando una BD de SQL server, tengo que cambiar mucho el codigo?? estoy usando mssql_connect() en lugar de mysql, pero me manda este error.
Call to undefined function mssql_connect()
Alguien sabe como lo compongo??
Josue Ochoa dice
Si, tendrías que utilizar un driver que haga la conexión entre PHP y SQL Server, revisa esto:
http://sqlsrvphp.codeplex.com/
EduR dice
Hola
Mi ignorancia es grande ya que soy nuevo en el tema, hace rato que estoy dando vueltas con este tema.
Hice todo tal cual, pero me faltaria el html para que esto funcione verdad? Me faltaria las cajas y un link que me lleve a registro. como seria eso? alguien me podria ayudar con este tema.
Perdon por lo basico de mi pregunta pero estoy en ese nivel.
Gracias.
andrea dice
necesito crear un login para permitir acceso a una pagina pero no me ha funcionado ,algunos de ustedes me puede colaborar
Monica dice
Hola, tengo que crear sesiones de usuarios por tipo de usuario y llevar a cada uno a su página, pero no estoy segura de como hacerlo,
Este es el código
function login($usuario, $password)
{
global $mysqli;
$stmt = $mysqli->prepare(«SELECT id, id_tipo, password FROM usuarios WHERE usuario = ? || correo = ? LIMIT 1»);
$stmt->bind_param(«ss», $usuario, $usuario);
$stmt->execute();
$stmt->store_result();
$rows = $stmt->num_rows;
if($rows > 0) {
if(isActivo($usuario)){
$stmt->bind_result($id, $id_tipo, $passwd);
$stmt->fetch();
$validaPassw = password_verify($password, $passwd);
if($validaPassw){
lastSession($id);
$_SESSION[‘id_usuario’] = $id;
$_SESSION[‘tipo_usuario’] = $id_tipo;
header(«location: entrada.php»);
} else {
$errors = «La contraseña es incorrecta»;
}
} else {
$errors = ‘El usuario no esta activo’;
}
} else {
$errors = «El nombre de usuario o correo electrónico no existe»;
}
return $errors;
}
Yo creo que el tipo de usuario para redirigir sería aquí
if($validaPassw){
lastSession($id);
$_SESSION[‘id_usuario’] = $id;
$_SESSION[‘tipo_usuario’] = $id_tipo;
header(«location: entrada.php»);
} else {
Pero no se muy bien com hacerlo. Me puedes por favor ayudar?