has($key)) { return $_SESSION[$key]; } return NULL; } public function set(string $key, mixed $value): void { $_SESSION[$key] = $value; } public function remove(string $key): void { if ($this->has($key)) { unset($_SESSION[$key]); } } public function clear(): void { session_unset(); } // TODO: throwaway code; rewrite for readability and also implement proper flashing by removing messages after one request public function flash(string $msg, string $type = 'info'): void { $key = 'flashed_messages'; if (!$this->has($key)) { $this->set($key, []); } if (count($this->get($key)) >= 100) { $this->remove($key); throw new Exception('Too many flashed messages!'); } $msgs = $this->get($key); $msgs[] = [ "message" => htmlspecialchars($msg), "type" => $type ]; $this->set( $key, $msgs ); } public function getFlashedMessages(): ?array { $key = 'flashed_messages'; if ($this->has($key)) { $msgs = $this->get($key); $this->remove($key); return $msgs; } return NULL; } // END TODO; }