<?php
class Session {
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();
}
}