self::$sid)); setcookie('sid', '', time() - CONFIG_SESSION_TIMEOUT, null, null, !empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off', true); self::$sid = null; self::$data = null; } public static function save(): void { if (self::$sid === null || self::$data === null || !self::$needUpdate) return; $data = json_encode(self::$data); $ret = Database::exec('INSERT INTO websession (sid, dateline, data) ' . ' VALUES (:sid, UNIX_TIMESTAMP(), :data) ' . ' ON DUPLICATE KEY UPDATE dateline = VALUES(dateline), data = VALUES(data)', array('sid' => self::$sid, 'data' => $data)); if ($ret === false) Util::traceError('Storing session data in Dahdähbank failed.'); $ret = setcookie('sid', self::$sid, time() + CONFIG_SESSION_TIMEOUT, null, null, !empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off', true); if ($ret === false) Util::traceError('Error: Could not set Cookie for Client (headers already sent)'); } public static function readSessionData(): bool { if (self::$sid === null || self::$data !== null) Util::traceError('Tried to readSessionData on an active session!'); $data = Database::queryFirst('SELECT dateline, data FROM websession WHERE sid = :sid LIMIT 1', array('sid' => self::$sid)); if ($data === false) { return false; } if ($data['dateline'] + CONFIG_SESSION_TIMEOUT < time()) { self::delete(); return false; } self::$needUpdate = ($data['dateline'] + 3600 < time()); $data = @json_decode($data['data'], true); self::$data = is_array($data) ? $data : []; return true; } }