Comunidad de diseño web y desarrollo en internet online

control de contraseña incorrecta

Citar            
MensajeEscrito el 17 Mar 2009 11:32 pm
Hola a todos...
deseo saber como puedo hacer para que a la tercera vez que ingrese mal la contraseña de un mismo usuario me salga un mensaje alertandome este evento....
este es mi archivo login3.php

<?php
session_start();

$servidor= "localhost";
$user= "root";
$password= "";
$base= "miproyecto";

$_SESSION['usuario']=$_POST['username'];

$conexion=mysql_connect($servidor,$user,$password) or die("Problemas en la conexion");
mysql_select_db($base,$conexion) or die("Problemas en la seleccion de la base de datos");



if ($_POST['username']) {
//Comprobacion del envio del nombre de usuario y password
$username=$_POST['username'];
$password=$_POST['password'];
if ($password==NULL) {
echo "La password no fue enviada";
}else{
$query = mysql_query("SELECT usuario ,password FROM usuarios WHERE usuario = '$username'") or die(mysql_error());
$data = mysql_fetch_array($query);
if($data['password'] != $password) {
header("Location: primera.php");

}else{




//$password=$_POST['password'];
$registros=mysql_query("select tipo_usuario, password from usuarios WHERE password = '$password'",$conexion) or die("Problemas en el select:".mysql_error());
//$data = mysql_fetch_array($registros);

while ($reg=mysql_fetch_array($registros)) {

switch ($reg['tipo_usuario']) {
case 1: header("Location: administrador.php"); break;
case 2: header("Location: especialista.php"); break;
case 3: header("Location: pacientes.php"); break;
}

}

}
}
}
mysql_close($conexion);
?>

le pose un contador pero este siempre se queda en 1, no se porque no se incrementa......Ayuda!!!! :D
cuando vuelve a pedir la contraseña no incrementa...

Por yolandatierra

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 17 Mar 2009 11:59 pm
pues hay muchas formas, la que te propongo es usando sesiones:
creas la variable de sesion:

Código PHP :

if (!isset($_SESSION['validado']))
{
      $_SESSION['validado'] = 0;
}


Y en la validacion va asi:

Código PHP :

if($data['password'] != $password) {
   if ( $_SESSION['intentos']++ > 3 )
   {
      header("Location: primera.php");
   }
}


Por cierto, no es esa la forma mas segura de usar passwords, almenos debes de cifrarlos con md5, ademas de que todo tu codigo es propenso a SQLInjection. Busca sobre esos temas en goolge. Suerte.

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 18 Mar 2009 02:57 am
wooooshhhppp!!

No era $_SESSION['intentos'], era $_SESSION['validado']. Sorry.

FAIL!!!

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 18 Mar 2009 04:09 am
como dice LongeVie es bueno o si queres lo podes registrar en una tabla donde guardes el id del usuario la cnatidad de intentos y la fehca y hora del ultimo intento, con eso podes banear a alguien por un par de horas.... o por dias :P ......U_U

Por jpcw

Claber

1715 de clabLevel

1 tutorial

Genero:Masculino  

AlgoritmicBrainDesigner

firefox
Citar            
MensajeEscrito el 19 Mar 2009 10:09 pm
Hola muchas gracias por tu ayuda, soy nueva en php. Y no se que estoy haciendo mal pero no tengo el resultado esperado.. te cuento lo que quiero:
Cuando un usuario ingrese por tercera vez consecutiva mal su contraseña, se debera mostrar un mensaje en un form de mi archivo primera.php como:
<form action="login3.php" class="error">
<?php

echo "Contraseña incorrecta, intentelo luego";

?>
</form>

Estoy mas de un mes con esto….. Te ruego que por favor me ayudes….. es para mi proyecto de la universidad….
Aquí te dejo la tabla que estoy usando y el archivo login3.php…

-- Estructura de tabla para la tabla `usuarios`
--

CREATE TABLE `usuarios` (
`id` int(11) NOT NULL auto_increment,
`usuario` varchar(30) NOT NULL,
`password` varchar(30) NOT NULL,
`email` varchar(40) NOT NULL,
`privilegios` varchar(30) NOT NULL,
`tipo_usuario` int(4) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;

--
-- Volcar la base de datos para la tabla `usuarios`
--

INSERT INTO `usuarios` (`id`, `usuario`, `password`, `email`, `privilegios`, `tipo_usuario`) VALUES
(2, 'gtierra', 'yolanda', '', '', 1),
(7, 'adrian', 'bebe', '[email protected]', '', 1),
(8, 'Martin', 'martin', '[email protected]', '', 2),
(9, 'Julio', 'julio', '[email protected]', '', 3);

************
Login3.php

<?php
session_start();

$servidor= "localhost";
$user= "root";
$password= "";
$base= "miproyecto";

$_SESSION['usuario']=$_POST['username'];


if (!isset($_SESSION['validado']))
{
$_SESSION['validado'] = 0;
}

$conexion=mysql_connect($servidor,$user,$password) or die("Problemas en la conexion");
mysql_select_db($base,$conexion) or die("Problemas en la seleccion de la base de datos");



if ($_POST['username']) {
//Comprobacion del envio del nombre de usuario y password
$username=$_POST['username'];
$password=$_POST['password'];
if ($password==NULL) {
echo "La password no fue enviada";
}else{
$query = mysql_query("SELECT usuario ,password FROM usuarios WHERE usuario = '$username'") or die(mysql_error());
$data = mysql_fetch_array($query);

if($data['password'] != $password) {
if ( $_SESSION['validado']++ > 3 )
{
header("Location: primera.php");
}



}else{


//$password=$_POST['password'];
$registros=mysql_query("select tipo_usuario, password from usuarios WHERE password = '$password'",$conexion) or die("Problemas en el select:".mysql_error());
//$data = mysql_fetch_array($registros);

while ($reg=mysql_fetch_array($registros)) {

switch ($reg['tipo_usuario']) {
case 1: header("Location: administrador.php"); break;
case 2: header("Location: especialista.php"); break;
case 3: header("Location: pacientes.php"); break;
}

}

}
}
}
mysql_close($conexion);
?>

Por yolandatierra

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 20 Mar 2009 01:29 am
Te vas a tu archivo primera.php y colocas al inicio:

Código PHP :

<?php
session_start();
if ( $_SESSION['intentos'] > 3 ) 
{ 
      $error_login = true;
}
?>


y ya en cualquier parte de tu archivo basta con colocar:

Código PHP :

<?php 
if( !empty( $error_login ) )
{
    echo "Error, se sobrepaso el limite de intentos de acceso, vuelva pronto";
}
?>


Aunque, no veo la necesidad de querer meterlo dentro de un form.

Por cierto, tu codigo colocalo dentro de las etiquetas adecuadas:

Código :

[php][/php]

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 20 Mar 2009 04:51 pm
holas, bueno aqui tenes la forma en que se lleva la cuenta con un session esto lo pones en tu validador de usuario, si lo pruebas en una pagina veras como el contador va subiendo, espero te sea de utilidad

Código PHP :

<?
session_start();

if(!isset($_SESSION['cantidad'])){
$_SESSION['cantidad'] = 1;
}else{
$_SESSION['cantidad'] = $_SESSION['cantidad']+1;
}
echo $_SESSION['cantidad'];
?>

Por jpcw

Claber

1715 de clabLevel

1 tutorial

Genero:Masculino  

AlgoritmicBrainDesigner

firefox
Citar            
MensajeEscrito el 24 Mar 2009 07:57 pm
Gracias a todos por sus ayudas.....

el codigo del contador de jpcw si funciono muy bien....Era lo que buscaba..... :)

Por yolandatierra

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 25 Mar 2009 04:27 am

jpcw escribió:

como dice LongeVie es bueno o si queres lo podes registrar en una tabla donde guardes el id del usuario la cnatidad de intentos y la fehca y hora del ultimo intento, con eso podes banear a alguien por un par de horas.... o por dias :P ......U_U

bueno te voy a explicar como es el procedimiento para hagas lo que te nombre en el post anterior

1ro: crea una tabla "Tablacontrol" en tu base de datos que tenga: idUsuario, NroIntentos, fechaHora
2do: cuando validas si el usuario y la clave que ingresa el usuario son correctas podes colocar algo como:

Código PHP :

if($claveIngresada == $claveGuardada && $codigoIngresado == $codigoGuardado){
    //ingresa o creas las session del usuario
    //debes hacer un update table Tablacontrol set NroIntentos = 0 where idUsuario = $codigoIngresado
    //para que reinicies los intentos de usuario
}else{
    // select * from Tablacontrol where idUsuario = $codigoIngresado
    if($resultado['NroIntetos']>=3){
          if($resultado['fecha'].....) //aqui decides que vas a validar si quieres bloquear al usuario por un dia o por horas
    }else{
        //  update table Tablacontrol set NroIntentos = $resultado['NroIntetos']+1, fechaHora = fechahoradehoy where idUsuario = $codigoIngresado
    }
}


3ro: esto es mas un seudo codigo que el mismo que debes programar pero se le asemeja mucho! te recomiendo que leas date y gregoriantojd para el calculo de las fechas

Por jpcw

Claber

1715 de clabLevel

1 tutorial

Genero:Masculino  

AlgoritmicBrainDesigner

firefox
Citar            
MensajeEscrito el 26 Mar 2009 03:12 am
opino lo mismo de las sesiones me parece bueno controlandolo con sesiones ademas de guardar un log en algun lugar base de datos o archivo plano no se cualquiera de esos

Por talcual

686 de clabLevel



 

Colombia

firefox
Citar            
MensajeEscrito el 27 Mar 2009 12:40 am
Gracias a Todos...
deseo saber como cierro sesion en este codigo... tengo un h ref donde esta cerrar sesion....

Por yolandatierra

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 27 Mar 2009 04:05 am

yolandatierra escribió:

Gracias a Todos...
deseo saber como cierro sesion en este codigo... tengo un h ref donde esta cerrar sesion....

el salir.php seria algo como :

Código PHP :

<?
$_SESSION['nombre de session que usas para mantener la session del usuario']= NULL;
//y redirecionas al index de la aplicacion con header
header('location: index.php');
?>

;)

Por jpcw

Claber

1715 de clabLevel

1 tutorial

Genero:Masculino  

AlgoritmicBrainDesigner

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.