0 && ($agora - $ultimoAcesso) > self::SESSAO_INATIVIDADE_SEGUNDOS ) { $this->encerrarSessao( 'inatividade' ); return; } /* * Verifica se a sessão atingiu seu tempo * máximo absoluto. */ if ( $inicioSessao > 0 && ($agora - $inicioSessao) > self::SESSAO_MAXIMA_SEGUNDOS ) { $this->encerrarSessao( 'tempo_maximo' ); return; } /* * Registra a última atividade do usuário. */ $_SESSION['last_activity'] = $agora; } /** * Encerra uma sessão expirada e redireciona * o usuário para a tela de login. * * O motivo da expiração é enviado através * de um parâmetro na URL. */ private function encerrarSessao( string $motivo ): void { /* * Remove todos os dados armazenados * na sessão atual. */ $_SESSION = []; /* * Remove o cookie da sessão do navegador. */ if (ini_get('session.use_cookies')) { $params = session_get_cookie_params(); setcookie( session_name(), '', time() - 42000, $params['path'], $params['domain'], (bool) $params['secure'], (bool) $params['httponly'] ); } /* * Destrói a sessão no servidor. */ session_destroy(); /* * Redireciona para o login informando * que a sessão foi encerrada. */ header( 'Location: /login.php?expirada=1&motivo=' . urlencode($motivo) ); exit; } /** * Executa a sequência básica de segurança * necessária para uma requisição da aplicação. * * Este método permite que as páginas utilizem * apenas uma chamada para inicializar a segurança. */ public function iniciarSeguranca(): void { /* * Configura o cookie antes de iniciar a sessão. */ $this->configurarSessao(); /* * Inicia a sessão. */ $this->iniciarSessao(); /* * Aplica os headers HTTP de segurança. */ $this->aplicarHeadersSeguranca(); /* * Verifica se uma sessão autenticada * expirou por tempo. */ $this->verificarExpiracaoSessao(); } } ?>