self::$sid)); setcookie('sid', '', time() - CONFIG_SESSION_TIMEOUT, null, null, !empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off', true); self::$sid = false; self::$data = false; } public static function save() { if (self::$sid === false || self::$data === false || !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() { if (self::$sid === false || self::$data !== false) 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()); self::$data = @json_decode($data['data'], true); if (!is_array(self::$data)) self::$data = array(); return true; } }