Spec-Zone.ru › Ruby 2.6

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

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

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

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

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

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
      lockf&.close
    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
    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.

Spec-Zone.ru

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