Foros del Web » Programando para Internet » PHP »

Clase de Login POO problema con array de Sesiones php mysqli

Estas en el tema de Clase de Login POO problema con array de Sesiones php mysqli en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 05/12/2014, 22:33
 
Fecha de Ingreso: septiembre-2011
Mensajes: 233
Antigüedad: 12 años, 7 meses
Puntos: 1
Clase de Login POO problema con array de Sesiones php mysqli

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.
  #2 (permalink)  
Antiguo 15/12/2014, 08:51
 
Fecha de Ingreso: septiembre-2011
Mensajes: 233
Antigüedad: 12 años, 7 meses
Puntos: 1
Respuesta: Clase de Login POO problema con array de Sesiones php mysqli

Para llamarlo desde el index lo hago de esta manera:
Código:
$objUsuario->setNombUsuario($_POST['usuario']);
			//utilizo el método set para pasarle el valor de la variable password
			$objUsuario->setClave($_POST['password']);
			//se verifica que la función login sea verdadera
			if($objUsuario->login()==true)
			{
				//si es verdadera se inicia la sesión
				session_start();
				$_SESSION['usuario']=$objUsuario;
				header('...');
			}
Pero en la variable $_SESSION['usuario'] no se me almacena el arreglo asociado y lo necesito porque quiero mostrar el id de esa persona en otra parte.

Me gustaría si me pudieran decir que tengo malo en el código? lo hice orientado a objetos utilizando mysqli.
  #3 (permalink)  
Antiguo 15/12/2014, 09:36
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Clase de Login POO problema con array de Sesiones php mysqli

Mejor debieras de utilizar Aura Auth: https://github.com/auraphp/Aura.Auth
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.

Etiquetas: clase, fecha, login, mysqli, poo, select, sesiones, variable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:53.