класс 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.