Buenas noches! He estado leyendo sobre la programación orientada a objetos en php y he estado practicando en estos días, acabo de terminar de hacer una clase de Usuario para el caso del login, leyendo algunos temas del foro le agregue al código la parte de limitar el intento para acceder eso me funciona pero el problema que se presenta es que quiero que en un arreglo llamado $_SESSION['usuario'] me almacene un arreglo asociado pero no lo hace y lo necesito porque quiero mostrar el id de esa persona en otra parte.
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:
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;
}
}
Me di cuenta que en la base de datos se guarda otra fecha y hora que no son de mi pc, por qué?
Si me podrían ayudar estaré agradecido.