Spec-Zone.ru › Ruby 3.2

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

Родитель:
Object

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

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

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

new(session, option={}) Показать исходный код
# File lib/cgi/session.rb, line 416
def initialize(session, option={})
  option = {'prefix' => 'cgi_sid_'}.update(option)
  @path, @hash = session.new_store_file(option)
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 463
def close
  update
end

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

delete() Показать исходный код
# File lib/cgi/session.rb, line 468
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 424
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 445
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–2022 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

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