<?php
/* Valida un login comprobando su usuario (ó email) y contraseña. */
class Login {
public $tabla='ligarevolution_web_usuario'; // Nombre de la tabla usarios.
public $campo_idUsuario='idUsuario'; // Campo que contiene el idUsuario.
public $campo_usuario='usuario'; // Campo que contiene los datos de los usuarios (se puede usar el email).
public $campo_clave='password'; // Campo que contiene la contraseña.
public $campo_verificado='verificado'; // Campo que contiene la activación de cuenta.
public $campo_email='email'; // Campo que contiene el email.
public $campo_staff='staff'; // Campo que contiene si es admin.
public $metodo_encriptacion='md5'; // Método utilizado para almacenar la contrasela. Opciones: sha1, mcrypt.
private $link; // Identificador de la conexión mysql que usamos.
/* Establecemos el método de construccion de la clase que se llamará al crear el objeto. Conecta a la BD. */
public function __construct() {
/* 1 - Conectamos a la base de datos utilizando los parámetros globales. */
$this->link = mysqli_connect(SERVIDOR_MYSQL, USUARIO_MYSQL, PASSWORD_MYSQL, BASE_DATOS);
if (!$this->link) {
trigger_error('Error al conectar al servidor mysql: ' . mysqli_error(),E_USER_ERROR);
}
// Seleccionar la base de datos activa.
$db_selected = mysqli_select_db($this->link,BASE_DATOS);
if (!$db_selected) {
trigger_error ('Error al conectar a la base de datos: ' . mysqli_error($this->link),E_USER_ERROR);
}
return true;
}
// El metodo de destrucción al destruir el objeto.
public function __destruct() {
mysqli_close($this->link);
}
/* Valida un usuario y contraseña. */
public function login($usuario, $password) {
// Usuario y password tienen datos?.
if (empty($usuario)) return false;
if (empty ($password)) return false;
// 2 - Prepara consulta SQL a ejecutar utilizando sólo el usuario y evitando ataques de inyección SQL.
$query='SELECT '.$this->campo_usuario.', '.$this->campo_clave.', '.$this->campo_verificado.', '.$this->campo_idUsuario.', '.$this->campo_email.', '.$this->campo_staff.' FROM '.$this->tabla.' WHERE '.$this->campo_usuario.'="'. mysqli_real_escape_string($this->link,$usuario).'" LIMIT 1 '; // Tabla y campo se definen como globales.
$result = mysqli_query($this->link,$query);
if (!$result) {
trigger_error('Error al ejecutar la consulta SQL: ' . mysqli_error($this->link),E_USER_ERROR);
}
// 3 - Extraemos el registro de este usuario.
$row = mysqli_fetch_assoc($result);
if ($row) {
// 4 - Generamos el hash de la contraseña encriptada para comparar o lo dejamos como texto plano.
switch ($this->metodo_encriptacion) {
case 'md5'|'MD5':
$hash=md5(sha1($password));
break;
default:
trigger_error('El valor de la propiedad metodo_encriptacion no es válido. Utiliza MD5 o SHA1 o TEXTO',E_USER_ERROR);
}
// 5 - Comprobamos la contraseña.
if ($hash==$row[$this->campo_clave]) {
@session_start();
$_SESSION['USUARIO']=array('USUARIO'=>$row[$this->campo_usuario],'VERIFICADO'=>$row[$this->campo_verificado],'IDUSUARIO'=>$row[$this->campo_idUsuario],'EMAIL'=>$row[$this->campo_email],'STAFF'=>$row[$this->campo_staff]); // Almacenamos en memoria el usuario
// en este punto puede ser interesante guardar más datos en memoria para su posterior uso, como por ejemplo un array asociativo con el id, nombre, email, preferencias, ....
return true; // Usuario y contraseña validadas.
} else {
@session_start();
unset($_SESSION['USUARIO']); // Destruimos la session activa al fallar el login por si existia.
return false; // No coincide la contraseña.
}
} else {
//El usuario no existe.
return false;
}
}
/* Veridica si el usuario está logeado */
public function estoy_logeado () {
@session_start(); // Inicia sesion (la @ evita los mensajes de error si la session ya está iniciada).
if (!isset($_SESSION['USUARIO'])) return false; // No logeado, no existe variable $_SESSION['USUARIO'].
if (!is_array($_SESSION['USUARIO'])) return false; // No logeado, no es un array $_SESSION['USUARIO'].
if (empty($_SESSION['USUARIO']['USUARIO'])) return false; // No logeado, sesión expirada.
// Cumple las condiciones anteriores, entonces es un usuario validado.
return true;
}
/* Vacia la sesion con los datos del usuario validado. */
public function logout() {
@session_start(); // Inicia sesion (la @ evita los mensajes de error si la session ya está iniciada).
unset($_SESSION['USUARIO']); // Eliminamos la variable con los datos de usuario.
unset($_SESSION['EQUIPO']); // Eliminamos la variable con los datos del equipo.
unset($_SESSION['INICIALACCESO']); // Eliminamos la variable con los datos de inicio de sesión.
session_write_close(); // Nos asegurmos que se guarda y cierra la sesion.
// Destruir el array equipo de inscripciones.php y el jugador de clubes.php.
return true;
}
}
?>