Class: CGI::Cookie

Inherits:
Array
  • Object
show all
Defined in:
lib/rubysl/cgi/cgi.rb

Overview

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.

Examples of use

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

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name = "", *value) ⇒ Cookie

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:

name

the name of the cookie. Required.

value

the cookie’s value or list of values.

path

the path for which this cookie applies. Defaults to the base directory of the CGI script.

domain

the domain for which this cookie applies.

expires

the time at which this cookie expires, as a Time object.

secure

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.



794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
# File 'lib/rubysl/cgi/cgi.rb', line 794

def initialize(name = "", *value)
  if name.kind_of?(String)
    @name = name
    @value = value
    %r|^(.*/)|.match(ENV["SCRIPT_NAME"])
    @path = ($1 or "")
    @secure = false
    return super(@value)
  end

  options = name
  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

Instance Attribute Details

#domainObject

Returns the value of attribute domain.



825
826
827
# File 'lib/rubysl/cgi/cgi.rb', line 825

def domain
  @domain
end

#expiresObject

Returns the value of attribute expires.



825
826
827
# File 'lib/rubysl/cgi/cgi.rb', line 825

def expires
  @expires
end

#nameObject

Returns the value of attribute name.



825
826
827
# File 'lib/rubysl/cgi/cgi.rb', line 825

def name
  @name
end

#pathObject

Returns the value of attribute path.



825
826
827
# File 'lib/rubysl/cgi/cgi.rb', line 825

def path
  @path
end

#secureObject

Returns the value of attribute secure.



826
827
828
# File 'lib/rubysl/cgi/cgi.rb', line 826

def secure
  @secure
end

Class Method Details

.parse(raw_cookie) ⇒ Object

Parse a raw cookie string into a hash of cookie-name=>Cookie pairs.

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


884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
# File 'lib/rubysl/cgi/cgi.rb', line 884

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, *values)
  end

  cookies
end

Instance Method Details

#to_sObject

Convert the Cookie to its string representation.



846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
# File 'lib/rubysl/cgi/cgi.rb', line 846

def to_s
  buf = ""
  buf += @name + '='

  if @value.kind_of?(String)
    buf += CGI::escape(@value)
  else
    buf += @value.collect{|v| CGI::escape(v) }.join("&")
  end

  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

#valueObject



833
834
835
# File 'lib/rubysl/cgi/cgi.rb', line 833

def value
  @value
end

#value=(val) ⇒ Object



828
829
830
831
# File 'lib/rubysl/cgi/cgi.rb', line 828

def value=(val)
  @value = Array(val)
  replace(@value)
end