Spec-Zone.ru › Ruby 3.4
  1. CGI::
  2. Cookie

class CGI::Cookie

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

Класс, представляющий cookie HTTP.

Помимо собственных полей и методов, экземпляр Cookie является делегатором массива своих значений.

См. RFC 2965.

Примеры использования

cookie1 = CGI::Cookie.new("name", "value1", "value2", ...)
cookie1 = CGI::Cookie.new("name" => "name", "value" => "value")
cookie1 = CGI::Cookie.new('name'     => 'name',
                          'value'    => ['value1', 'value2', ...],
                          'path'     => 'path',   # optional
                          'domain'   => 'domain', # optional
                          'expires'  => Time.now, # optional
                          'secure'   => true,     # optional
                          'httponly' => true      # optional
                          )

cgi.out("cookie" => [cookie1, cookie2]) { "string" }

name     = cookie1.name
values   = cookie1.value
path     = cookie1.path
domain   = cookie1.domain
expires  = cookie1.expires
secure   = cookie1.secure
httponly = cookie1.httponly

cookie1.name     = 'name'
cookie1.value    = ['value1', 'value2', ...]
cookie1.path     = 'path'
cookie1.domain   = 'domain'
cookie1.expires  = Time.now + 30
cookie1.secure   = true
cookie1.httponly = true

Константы

DOMAIN_VALUE_RE
PATH_VALUE_RE
TOKEN_RE

Атрибуты

domain [R]

Домен, для которого применяется этот cookie, типа String

expires [RW]

Time, когда срок действия этого cookie истекает, типа Time

httponly [R]

Истина, если этот cookie имеет атрибут httponly, иначе ложь

name [R]

Имя этого cookie, типа String

path [R]

Путь, для которого применяется этот cookie, типа String

secure [R]

Истина, если этот cookie является защищённым, иначе ложь

Общедоступные методы класса

new(name_string,*value) Показать исходный код
new(options_hash)
# File lib/cgi/cookie.rb, line 75
def initialize(name = "", *value)
  @domain = nil
  @expires = nil
  if name.kind_of?(String)
    self.name = name
    self.path = (%r|\A(.*/)| =~ ENV["SCRIPT_NAME"] ? $1 : "")
    @secure = false
    @httponly = false
    return super(value)
  end

  options = name
  unless options.has_key?("name")
    raise ArgumentError, "`name' required"
  end

  self.name = options["name"]
  value = Array(options["value"])
  # simple support for IE
  self.path = options["path"] || (%r|\A(.*/)| =~ ENV["SCRIPT_NAME"] ? $1 : "")
  self.domain = options["domain"]
  @expires = options["expires"]
  @secure = options["secure"] == true
  @httponly = options["httponly"] == true

  super(value)
end

Создаёт новый объект CGI::Cookie.

name_string

Имя cookie; в этой форме домен domain и срок действия не задаются. Значение path берётся из переменной окружения SCRIPT_NAME, а secure имеет значение false.

*value

Значение или список значений cookie

options_hash

Hash параметров для инициализации этого объекта Cookie. Возможны следующие параметры:

name

имя cookie. Обязательный параметр.

value

значение cookie или список значений.

path

путь, для которого применяется этот cookie. По умолчанию используется значение переменной окружения SCRIPT_NAME.

domain

домен, для которого применяется этот cookie.

expires

время истечения срока действия cookie в виде объекта Time.

secure

указывает, является ли cookie защищённым (по умолчанию false). Защищённые cookie передаются только серверам HTTPS.

httponly

указывает, является ли cookie cookie HttpOnly (по умолчанию

false).  HttpOnly cookies are not available to javascript.

Эти ключевые слова соответствуют атрибутам объекта cookie.

Вызывает метод суперкласса Array::new
parse (raw_cookie) Показать исходный код
# File lib/cgi/cookie.rb, line 183
def self.parse(raw_cookie)
  cookies = Hash.new([])
  return cookies unless raw_cookie

  raw_cookie.split(/;\s?/).each do |pairs|
    name, values = pairs.split('=',2)
    next unless name and values
    values ||= ""
    values = values.split('&').collect{|v| CGI.unescape(v,@@accept_charset) }
    if cookies.has_key?(name)
      cookies[name].concat(values)
    else
      cookies[name] = Cookie.new(name, *values)
    end
  end

  cookies
end

Разбирает необработанную строку cookie в хеш пар вида имя-cookie=>Cookie.

cookies = CGI::Cookie.parse("raw_cookie_string")
  # { "name1" => cookie1, "name2" => cookie2, ... }

Общедоступные методы экземпляра

domain= (str) Показать исходный код
# File lib/cgi/cookie.rb, line 126
def domain=(str)
  if str and ((str = str.b).bytesize > 255 or !DOMAIN_VALUE_RE.match?(str))
    raise ArgumentError, "invalid domain: #{str.dump}"
  end
  @domain = str
end

Задаёт домен, для которого применяется этот cookie

httponly= (val) Показать исходный код
# File lib/cgi/cookie.rb, line 161
def httponly=(val)
  @httponly = !!val
end

Задаёт, является ли Cookie cookie с атрибутом httponly.

val должен иметь логическое значение.

inspect () Показать исходный код
# File lib/cgi/cookie.rb, line 203
def inspect
  "#<CGI::Cookie: #{self.to_s.inspect}>"
end

Краткое описание строки cookie.

name= (str) Показать исходный код
# File lib/cgi/cookie.rb, line 106
def name=(str)
  if str and !TOKEN_RE.match?(str)
    raise ArgumentError, "invalid name: #{str.dump}"
  end
  @name = str
end

Задаёт имя этого cookie

path= (str) Показать исходный код
# File lib/cgi/cookie.rb, line 116
def path=(str)
  if str and !PATH_VALUE_RE.match?(str)
    raise ArgumentError, "invalid path: #{str.dump}"
  end
  @path = str
end

Задаёт путь, для которого применяется этот cookie

secure= (val) Показать исходный код
# File lib/cgi/cookie.rb, line 153
def secure=(val)
  @secure = val if val == true or val == false
  @secure
end

Задаёт, является ли Cookie защищённым cookie.

val должен иметь логическое значение.

to_s () Показать исходный код
# File lib/cgi/cookie.rb, line 166
def to_s
  val = collect{|v| CGI.escape(v) }.join("&")
  buf = "#{@name}=#{val}".dup
  buf << "; domain=#{@domain}" if @domain
  buf << "; path=#{@path}"     if @path
  buf << "; expires=#{CGI.rfc1123_date(@expires)}" if @expires
  buf << "; secure"            if @secure
  buf << "; HttpOnly"          if @httponly
  buf
end

Преобразует Cookie в строковое представление.

value () Показать исходный код
# File lib/cgi/cookie.rb, line 141
def value
  self
end

Возвращает значение или список значений этого cookie.

value= (val) Показать исходный код
# File lib/cgi/cookie.rb, line 146
def value=(val)
  replace(Array(val))
end

Заменяет значение этого cookie новым значением или списком значений.

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