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