Spec-Zone.ru › Ruby 3.4
  1. CGI::
  2. Session::
  3. FileStore

class CGI::Session::FileStore

Родительский класс:
Object

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

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

Открытые методы класса

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

Spec-Zone.ru

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