Spec-Zone.ru › Ruby 2.3

класс CGI::Session::FileStore

Родитель:
Объект

Класс хранения сессий на основе файлов.

Реализует хранение сессий как плоского файла с парами «ключ=значение». Этот тип хранения работает только непосредственно со строковыми значениями; пользователь отвечает за преобразование других типов в строки при хранении и из строк при получении.

Публичные методы класса

new(session, option={}) Показать исходный код
# 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 этой сессии будет создан, если он не существует, или открыт, если существует.

Публичные методы экземпляра

close() Показать исходный код
# File lib/cgi/session.rb, line 435
def close
  update
end

Обновить и закрыть файл FileStore сессии.

delete() Показать исходный код
# 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 сессии.

restore() Показать исходный код
# 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 сессии.

Возвращает состояние сессии в виде словаря.

update() Показать исходный код
# 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API