класс CGI::Session::FileStore
Класс для хранения сессии на основе файлов.
Реализует хранение сессии как плоского файла с значениями вида «ключ=значение». Этот тип хранения работает только непосредственно со значениями String; пользователь отвечает за преобразование других типов в строки при сохранении и из строк при извлечении.
Публичные методы класса
# File lib/cgi/session.rb, line 416
def initialize(session, option={})
option = {'prefix' => 'cgi_sid_'}.update(option)
@path, @hash = session.new_store_file(option)
end Создать новый экземпляр FileStore.
Этот конструктор используется внутренне классом CGI::Session. Пользователю обычно не нужно вызывать его напрямую.
session — сессия, для которой создаётся этот экземпляр. Идентификатор сессии должен содержать только буквенно-цифровые символы; автоматически сгенерированные идентификаторы сессий соответствуют этому требованию.
option — словарь опций для инициализатора. Различаются следующие опции:
- tmpdir
-
директория для хранения файла
FileStore. По умолчаниюDir::tmpdir(обычно “/tmp” в системах Unix). - prefix
-
префикс, добавляемый к идентификатору сессии при создании имени файла для файла
FileStoreэтой сессии. По умолчанию “cgi_sid_”. - suffix
-
суффикс, добавляемый к идентификатору сессии при создании имени файла для файла
FileStoreэтой сессии. По умолчанию пустая строка.
Файл FileStore этой сессии будет создан, если он не существует, или открыт, если существует.
Публичные методы экземпляра
# File lib/cgi/session.rb, line 463 def close update end
Обновить и закрыть файл FileStore сессии.
# File lib/cgi/session.rb, line 468 def delete File::unlink @path+".lock" rescue nil File::unlink @path+".new" rescue nil File::unlink @path rescue nil end
Закрыть и удалить файл FileStore сессии.
# File lib/cgi/session.rb, line 424
def restore
unless @hash
@hash = {}
begin
lockf = File.open(@path+".lock", "r")
lockf.flock File::LOCK_SH
f = File.open(@path, 'r')
for line in f
line.chomp!
k, v = line.split('=',2)
@hash[CGI.unescape(k)] = Marshal.restore(CGI.unescape(v))
end
ensure
f&.close
lockf&.close
end
end
@hash
end Восстановить состояние сессии из файла FileStore сессии.
Возвращает состояние сессии в виде словаря.
# File lib/cgi/session.rb, line 445
def update
return unless @hash
begin
lockf = File.open(@path+".lock", File::CREAT|File::RDWR, 0600)
lockf.flock File::LOCK_EX
f = File.open(@path+".new", File::CREAT|File::TRUNC|File::WRONLY, 0600)
for k,v in @hash
f.printf "%s=%s\n", CGI.escape(k), CGI.escape(String(Marshal.dump(v)))
end
f.close
File.rename @path+".new", @path
ensure
f&.close
lockf&.close
end
end Сохранить состояние сессии в файле FileStore сессии.
Ruby Core © 1993–2022 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.