db = $db; } #[\ReturnTypeWillChange] public function close() { return true; } #[\ReturnTypeWillChange] public function destroy($sessionID) { return $this->db->table(self::TABLE)->eq('id', $sessionID)->remove(); } #[\ReturnTypeWillChange] public function gc($maxlifetime) { return $this->db->table(self::TABLE)->lt('expire_at', time())->remove(); } #[\ReturnTypeWillChange] public function open($savePath, $name) { return true; } #[\ReturnTypeWillChange] public function read($sessionID) { $result = $this->db->table(self::TABLE)->eq('id', $sessionID)->findOneColumn('data'); return $result ?: ''; } #[\ReturnTypeWillChange] public function write($sessionID, $data) { if (SESSION_DURATION > 0) { $lifetime = time() + SESSION_DURATION; } else { $lifetime = time() + (ini_get('session.gc_maxlifetime') ?: 1440); } $this->db->startTransaction(); if ($this->db->table(self::TABLE)->eq('id', $sessionID)->exists()) { $this->db->table(self::TABLE)->eq('id', $sessionID)->update([ 'expire_at' => $lifetime, 'data' => $data, ]); } else { $this->db->table(self::TABLE)->insert([ 'id' => $sessionID, 'expire_at' => $lifetime, 'data' => $data, ]); } $this->db->closeTransaction(); return true; } }