Spec-Zone.ru › Ruby 2.2

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

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

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

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

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

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

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

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

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

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

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

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

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

Spec-Zone.ru

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