Spec-Zone.ru › Ruby 3.4

класс 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–2024 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

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