<?php
// Handles anything to do with sessions
class Session
{
public function __construct()
// Start new session if there is none
if (session_status() === PHP_SESSION_NONE)
session_start();
}
public function has(string $key): bool
return array_key_exists($key, $_SESSION);
// Returns mixed but php 7.4 DOES NOT SUPPORT THAT TYPE HINT >:((
public function get(string $key)
if ($this->has($key))
return $_SESSION[$key];
return NULL;
public function set(string $key, $value): void
$_SESSION[$key] = $value;
public function remove(string $key): void
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
if ($this->has($key)) {
return $msgs;
// END TODO;