класс CGI::Session::FileStore
Класс хранения сессий на основе файлов.
Реализует хранение сессий как плоского файла с парами 'ключ=значение'. Этот тип хранения работает только с String значениями; пользователь отвечает за преобразование других типов в строки при сохранении и из строк при извлечении.
Публичные методы класса
# 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
lockf&.close
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
lockf&.close
end
end Сохранить состояние сессии в файле FileStore сессии.
Ruby Core © 1993–2017 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.