Spec-Zone.ru › Ruby 3.1

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

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

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

Реализует хранение сессии как плоского файла с значениями вида «ключ=значение». Этот тип хранения работает только непосредственно со значениями 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