Dave Jarvis' Repositories

git clone https://repo.autonoma.ca/repo/pod.git
<?php
class Session {
  // Eliminates the session data after this duration (in seconds).
  private const LIFETIME = 3600;

  private int $lifetime;

  public function __construct( ?int $lifetime = null ) {
    $this->lifetime = $lifetime ?? self::LIFETIME;

    if( session_status() === PHP_SESSION_NONE ) {
      session_start();
      $this->validate();
    }
  }

  public function write( $key, $value ) {
    $_SESSION[ $key ] = $value;
  }

  public function read( $key ) {
    return $_SESSION[ $key ] ?? null;
  }

  public function clear() {
    if( session_status() === PHP_SESSION_ACTIVE ) {
      $_SESSION = [];
      session_destroy();
    }
  }

  private function validate() {
    if( isset( $_SESSION['last_activity'] ) ) {
      $elapsed = time() - $_SESSION['last_activity'];

      if( $elapsed > $this->lifetime ) {
        session_unset();
        session_destroy();
        session_start();
      }
    }

    $_SESSION['last_activity'] = time();
  }
}