Me gustaría que revisarán mi código para ver que tengo malo, que me aconsejan que debo de agregarle para que tenga mayor seguridad, también me gustaría resolver la parte de que en el arreglo $_SESSION[‘usuario’] se pueda almacenar el arreglo asociativo, que debo hacer? y que tengo malo en el código?, este es el código que estoy utilizando:
Código:
Me di cuenta que en la base de datos se guarda otra fecha y hora que no son de mi pc, por qué?require_once('conexion.php'); Class Usuario{ //priopiedades de la clases private $idEmpleado; private $nombUsuario; private $claveUsuario; private $intento; private $fechaIntento; private $error; //función constructor public function __construct($idEmpleado=null,$nombUsuario=null,$claveUsuario=null,$intento=null,$fechaIntento=null) { $this->idEmpleado=$idEmpleado; $this->nombUsuario=$nombUsuario; $this->claveUsuario=$claveUsuario; $this->intento=$intento; $this->fechaIntento=$Intento; } //metodo get y set public function getError(){ return $this->error; } public function getId(){ return $this->idEmpleado; } public function getNombUsuario(){ return $this->nombUsuario; } public function getClave(){ return $this->claveUsuario; } public function getIntento(){ return $this->intento; } public function getFechaIntento(){ return $this->fechaIntento; } public function setId($idEmpleado){ $this->idEmpleado=$idEmpleado; } public function setNombUsuario($nombUsuario){ $this->nombUsuario=$nombUsuario; } public function setClave($claveUsuario){ $this->claveUsuario=$claveUsuario; } //método para verificar el usuario public function login(){ try { $link=new Conexion();//se crea un objeto de la clase conexión $conexion=$link->conectar(); $consulta=$conexion->prepare('SELECT idEmpleado, claveUsuario, intento, fechaIntento FROM usuario WHERE nombUsuario=?'); $consulta->bind_param('s',$this->nombUsuario); $consulta->execute(); $consulta->bind_result($idEmpleado,$claveUsuario,$intento,$fechaIntento); $row=$consulta->fetch(); if($row) { if($intento<3)//si el intento es menor que 3 { if($this->claveUsuario==$claveUsuario)//comparo las claves { session_start();//inicio sesión $_SESSION['usuario']=$row;//guardo en la variable sesión con la fila del arreglo $row $this->intento=0; $this->actualizarVisita($intento,$nombUsuario);//actualizo para colocar el intento en 0 return true; } else { $this->actualizarIntento(date("Y-m-d H:i:s"),($intento+1),$this->nombUsuario);//llama a la función para actualizar los intentos y la fecha $this->error='Error Clave o Usuario Incorrecto'; return false; } } else { if($this->restarMinutos(date("Y-m-d H:i:s1"),$fechaIntento)<15)//verifico que hayan pasado 15min para que pueda acceder { $this->actualizarIntento(date("Y-m-d H:i:s"),($intento+1),$this->nombUsuario); $this->error="Fallaste 3 veces seguidas en acceder. Por favor espera 15 minutos e intenta nuevemante."; return false; } else { $this->intento=0; $this->actualizarVisita($this->intento,$this->nombUsuario); $this->error="Han pasado 15min del bloqueo de su cuenta. Por favor, ingrese nuevamente el usuario y la clave de ingreso."; return false; } } } else { $this->error='Error Clave o Usuario Incorrecto'; return false; } } catch(Exception $e) { //Aqui caen tus errores. echo $e->getMessage(); } } //método para actualizar la consulta public function actualizarVisita($intento,$usuario){ $link=new Conexion(); $conexion=$link->conectar(); $consulta=$conexion->prepare('UPDATE usuario SET intento=? WHERE nombUsuario=?'); $consulta->bind_param('is',$intento,$usuario); $consulta->execute(); $conexion->close(); $consulta->close(); } //mpetodo para actualizar los intentos public function actualizarIntento($fechaIntento,$intento,$usuario){ $link=new Conexion(); $conexion=$link->conectar(); $consulta=$conexion->prepare('UPDATE usuario SET fechaIntento=?, intento=? WHERE nombUsuario=?'); $consulta->bind_param('sis',$fechaIntento,$intento,$usuario); $consulta->execute(); $conexion->close(); $consulta->close(); } //método para restar la fecha de ahora con la de la base de datos public function restarMinutos($fecha1,$fecha2){ $minutos=ceil((strtotime($fecha1)-strtotime($fecha2))/60); return $minutos; } }
Si me podrían ayudar estaré agradecido.