класс CGI::Session::FileStore
Класс хранения сессий на основе файлов.
Реализует хранение сессий как плоского файла с парами «ключ=значение». Этот тип хранения работает только непосредственно со строковыми значениями; пользователь отвечает за преобразование других типов в строки при хранении и из строк при получении.
Публичные методы класса
# File lib/cgi/session.rb, line 375
def initialize(session, option={})
dir = option['tmpdir'] || Dir::tmpdir
prefix = option['prefix'] || 'cgi_sid_'
suffix = option['suffix'] || ''
id = session.session_id
require 'digest/md5'
md5 = Digest::MD5.hexdigest(id)[0,16]
@path = dir+"/"+prefix+md5+suffix
if File::exist? @path
@hash = nil
else
unless session.new_session
raise CGI::Session::NoSession, "uninitialized session"
end
@hash = {}
end
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 435 def close update end
Обновить и закрыть файл FileStore сессии.
# File lib/cgi/session.rb, line 440 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 396
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 unless f.nil?
lockf.close if lockf
end
end
@hash
end Восстановить состояние сессии из файла FileStore сессии.
Возвращает состояние сессии в виде словаря.
# File lib/cgi/session.rb, line 417
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 if f and !f.closed?
lockf.close if lockf
end
end Сохранить состояние сессии в файле FileStore сессии.
Ruby Core © 1993–2017 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.