public function execute()
 {
     try {
         if (request::getInstance()->isMethod('POST')) {
             $usuario = request::getInstance()->getPost('inputUser');
             $password = request::getInstance()->getPost('inputPassword');
             if (($objUsuario = usuarioTableClass::verifyUser($usuario, $password)) !== false) {
                 hook\security\securityHookClass::login($objUsuario);
                 if (request::getInstance()->hasPost('chkRememberMe') === true) {
                     $chkRememberMe = request::getInstance()->getPost('chkRememberMe');
                     $hash = md5($objUsuario[0]->id_usuario . $objUsuario[0]->usuario . date(config::getFormatTimestamp()));
                     $data = array(recordarMeTableClass::USUARIO_ID => $objUsuario[0]->id_usuario, recordarMeTableClass::HASH_COOKIE => $hash, recordarMeTableClass::IP_ADDRESS => request::getInstance()->getServer('REMOTE_ADDR'), recordarMeTableClass::CREATED_AT => date(config::getFormatTimestamp()));
                     recordarMeTableClass::insert($data);
                     setcookie(config::getCookieNameRememberMe(), $hash, time() + config::getCookieTime(), config::getCookiePath());
                 }
                 log::register('identificacion', 'NINGUNA');
                 hook\security\securityHookClass::redirectUrl();
             } else {
                 session::getInstance()->setError('Usuario y contraseña incorrectos');
                 routing::getInstance()->redirect(config::getDefaultModuleSecurity(), config::getDefaultActionSecurity());
             }
         } else {
             routing::getInstance()->redirect(config::getDefaultModule(), config::getDefaultAction());
         }
     } catch (PDOException $exc) {
         session::getInstance()->setFlash('exc', $exc);
         routing::getInstance()->forward('shfSecurity', 'exception');
     }
 }
 public static function clearSessions()
 {
     try {
         $sql = 'DELETE FROM ' . recordarMeTableClass::getNameTable() . ' WHERE localtimestamp(0) > (' . recordarMeTableClass::CREATED_AT . ' + INTERVAL :timeSeconds)';
         $params = array(':timeSeconds' => config::getCookieTime() . ' seconds');
         $answer = model::getInstance()->prepare($sql);
         $answer->execute($params);
         return true;
     } catch (PDOException $exc) {
         throw $exc;
     }
 }
 public function execute()
 {
     try {
         log::register('salida del sistema', 'NINGUNA', null, null, session::getInstance()->getUserId());
         session::getInstance()->setUserAuthenticate(false);
         session::getInstance()->setUserId(null);
         session::getInstance()->setUserName(null);
         session::getInstance()->deleteCredentials();
         if (request::getInstance()->hasCookie(config::getCookieNameRememberMe()) === true) {
             recordarMeTableClass::deleteSession(request::getInstance()->getCookie(config::getCookieNameRememberMe()), request::getInstance()->getServer('REMOTE_ADDR'));
             setcookie(config::getCookieNameRememberMe(), '', time() - config::getCookieTime(), config::getCookiePath());
         }
         routing::getInstance()->redirect(config::getDefaultModule(), config::getDefaultAction());
     } catch (PDOException $exc) {
         session::getInstance()->setFlash('exc', $exc);
         routing::getInstance()->forward('shfSecurity', 'exception');
     }
 }
 private static function verifyCookieRememberMe()
 {
     // Si existe la cookie con el nombre para recordar el inicio de sesión (verifico)
     if (request::getInstance()->hasCookie(config::getCookieNameRememberMe())) {
         // borro las sesiones abiertas que estén registradas en base de datos con un tiempo mayor a 8 días
         \recordarMeTableClass::clearSessions();
         // entonces verifico que se encuentre en base de datos y guardo el resultado
         if (($objUsuario = \recordarMeTableClass::getUserAndPassword(request::getInstance()->getServer('REMOTE_ADDR'), request::getInstance()->getCookie(config::getCookieNameRememberMe()))) !== false) {
             // en caso de que esté en la base de datos, esto quiere decir que hay un inicio de sesión
             // recordado y hay que iniciar sesión en el servidor
             self::login($objUsuario);
             self::saveUrlParams();
             self::redirectUrl();
         }
     }
 }