-- ─── «Manter sessão iniciada» ──────────────────────────────────────────────── -- Auditoria 2026-09-24, "Sem «Manter sessão iniciada»" (Médio). A sessão do -- PHP morre com o browser e o garbage collector apaga-a do servidor bem antes -- disso — esticar o cookie da sessão não chega, é preciso estado próprio. -- -- Selector/validator (o mesmo desenho do platform-tools functions_remember.php, -- implementado localmente porque esta app tem a sua própria autenticação — ver -- config/functions_remember.php): selector em claro e UNIQUE (é o índice da -- consulta), só o hash SHA-256 do validator fica guardado. Quem levar um dump -- desta tabela não consegue forjar um cookie a partir dela. -- -- Safe to re-run. CREATE TABLE IF NOT EXISTS `remember_tokens` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `user_id` INT UNSIGNED NOT NULL, `selector` CHAR(32) NOT NULL, `validator_hash` CHAR(64) NOT NULL, `expires_at` DATETIME NOT NULL, `last_ip` VARCHAR(45) NOT NULL DEFAULT '', `user_agent` VARCHAR(255) NOT NULL DEFAULT '', `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `idx_remember_selector` (`selector`), KEY `idx_remember_user` (`user_id`), KEY `idx_remember_expires` (`expires_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;