класс CGI::Session::FileStore
Класс хранения сессий на основе файлов.
Реализует хранение сессий как плоского файла с значениями вида 'ключ=значение'. Этот тип хранения работает только с строковыми значениями; пользователь отвечает за преобразование других типов в строки при сохранении и из строк при извлечении.
Публичные методы класса
# File lib/cgi/session.rb, line 372
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 432 def close update end
Обновить и закрыть файл FileStore сессии.
# File lib/cgi/session.rb, line 437 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 393
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 414
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.