class CGI::Session::FileStore
Класс для хранения сеансов в файлах.
Реализует хранение сеансов в виде обычного файла со значениями «ключ=значение». Этот тип хранилища работает напрямую только со значениями String; при сохранении данных других типов пользователь должен преобразовывать их в Strings, а при извлечении — преобразовывать Strings обратно.
Открытые методы класса
# 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–2025 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.