Class representing an HTTP cookie.
In addition to its specific fields and methods, a Cookie instance is a delegator to the array of its values.
See 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
)
cgi.out("cookie" => [cookie1, cookie2]) { "string" }
name = cookie1.name
values = cookie1.value
path = cookie1.path
domain = cookie1.domain
expires = cookie1.expires
secure = cookie1.secure
cookie1.name = 'name'
cookie1.value = ['value1', 'value2', ...]
cookie1.path = 'path'
cookie1.domain = 'domain'
cookie1.expires = Time.now + 30
cookie1.secure = true
Create a new CGI::Cookie object.
The contents of the cookie can be specified as a name and one
or more value arguments. Alternatively, the contents can be
specified as a single hash argument. The possible keywords of this hash
are as follows:
the name of the cookie. Required.
the cookie's value or list of values.
the path for which this cookie applies. Defaults to the base directory of the CGI script.
the domain for which this cookie applies.
the time at which this cookie expires, as a Time object.
whether this cookie is a secure cookie or not (default to false). Secure cookies are only transmitted to HTTPS servers.
These keywords correspond to attributes of the cookie object.
# File cgi.rb, line 794
def initialize(name = "", *value)
options = if name.kind_of?(String)
{ "name" => name, "value" => value }
else
name
end
unless options.has_key?("name")
raise ArgumentError, "`name' required"
end
@name = options["name"]
@value = Array(options["value"])
# simple support for IE
if options["path"]
@path = options["path"]
else
%r|^(.*/)|.match(ENV["SCRIPT_NAME"])
@path = ($1 or "")
end
@domain = options["domain"]
@expires = options["expires"]
@secure = options["secure"] == true ? true : false
super(@value)
end
Parse a raw cookie string into a hash of cookie-name=>Cookie pairs.
cookies = CGI::Cookie::parse("raw_cookie_string") # { "name1" => cookie1, "name2" => cookie2, ... }
# File cgi.rb, line 871
def Cookie::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
name = CGI::unescape(name)
values ||= ""
values = values.split('&').collect{|v| CGI::unescape(v) }
if cookies.has_key?(name)
values = cookies[name].value + values
end
cookies[name] = Cookie::new({ "name" => name, "value" => values })
end
cookies
end
Set whether the Cookie is a secure cookie or not.
val must be a boolean.
# File cgi.rb, line 826
def secure=(val)
@secure = val if val == true or val == false
@secure
end
Convert the Cookie to its string representation.
# File cgi.rb, line 837
def to_s
buf = ""
buf += @name + '='
buf += @value.map { |v| CGI::escape(v.to_s) }.join("&")
if @domain
buf += '; domain=' + @domain
end
if @path
buf += '; path=' + @path
end
if @expires
buf += '; expires=' + CGI::rfc1123_date(@expires)
end
if @secure == true
buf += '; secure'
end
buf
end