Spec-Zone.ru › Ruby 3.4

class CGI::Cookie

Parent:
Массив

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

Помимо своих специфических полей и методов, экземпляр 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]

Время истечения срока действия этого cookie, в виде Time

httponly [R]

True, если этот cookie является httponly, иначе false

name [R]

Имя этого cookie, в виде String

path [R]

Путь, к которому относится этот cookie, в виде String

secure [R]

True, если этот cookie является защищённым; false в противном случае

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

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

Хеш-таблица параметров для инициализации этого объекта 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)
      values = cookies[name].value + values
    end
    cookies[name] = Cookie.new(name, *values)
  end

  cookies
end

Разбирает строку raw 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

Set домен, к которому относится этот cookie

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

Set является ли Cookie cookie httponly или нет.

val должен быть булевым значением.

inspect ()
Исходный код
# File lib/cgi/cookie.rb, line 202
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

Set имя этого 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

Set путь, к которому относится этот cookie

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

Set является ли 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–2024 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

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