This is a cookie class that fixes the performance problems with the default one that ships with 1.8.1 and below. It replaces the inheritance on SimpleDelegator with DelegateClass(Array) following the suggestion from Matz on groups.google.com/groups?th=e3a4e68ba042f842&seekm=c3sioe%241qvm%241%40news.cybercity.dk#link14

Methods
#
N
P
S
T
Attributes
[RW] domain
[RW] expires
[RW] name
[RW] path
[R] secure
[RW] value
Class Public methods
new(name = '', *value)

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.

# File rails/actionpack/lib/action_controller/cgi_ext/cookie_performance_fix.rb, line 26
def initialize(name = '', *value)
  if name.kind_of?(String)
    @name = name
    @value = Array(value)
    @domain = nil
    @expires = nil
    @secure = false
    @path = nil
  else
    @name = name['name']
    @value = Array(name['value'])
    @domain = name['domain']
    @expires = name['expires']
    @secure = name['secure'] || false
    @path = name['path']
  end
  
  unless @name
    raise ArgumentError, "`name' required"
  end

  # simple support for IE
  unless @path
    %r^(.*/)|.match(ENV['SCRIPT_NAME'])
    @path = ($1 or '')
  end

  super(@value)
end
parse(raw_cookie)

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 rails/actionpack/lib/action_controller/cgi_ext/cookie_performance_fix.rb, line 107
def self.parse(raw_cookie)
  cookies = Hash.new([])

  if raw_cookie
    raw_cookie.split(%r; ?/).each do |pairs|
      name, values = pairs.split('=',2)
      next unless name and values
      name = CGI::unescape(name)
      values = values.split('&').collect!{|v| CGI::unescape(v) }
      unless cookies.has_key?(name)
        cookies[name] = new(name, *values)
      end
    end
  end

  cookies
end
Instance Public methods
__setobj__(obj)
# File rails/actionpack/lib/action_controller/cgi_ext/cookie_performance_fix.rb, line 56
def __setobj__(obj)
  @_dc_obj = obj
end
secure=(val)

Set whether the Cookie is a secure cookie or not.

val must be a boolean.

# File rails/actionpack/lib/action_controller/cgi_ext/cookie_performance_fix.rb, line 66
def secure=(val)
  @secure = val if val == true or val == false
  @secure
end
to_s()

Convert the Cookie to its string representation.

# File rails/actionpack/lib/action_controller/cgi_ext/cookie_performance_fix.rb, line 72
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