Method: Rack::Response#set_cookie

Defined in:
lib/gems/rack-0.9.1/lib/rack/response.rb


54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/gems/rack-0.9.1/lib/rack/response.rb', line 54

def set_cookie(key, value)
  case value
  when Hash
    domain  = "; domain="  + value[:domain]    if value[:domain]
    path    = "; path="    + value[:path]      if value[:path]
    # According to RFC 2109, we need dashes here.
    # N.B.: cgi.rb uses spaces...
    expires = "; expires=" + value[:expires].clone.gmtime.
      strftime("%a, %d-%b-%Y %H:%M:%S GMT")    if value[:expires]
    secure = "; secure"  if value[:secure]
    value = value[:value]
  end
  value = [value]  unless Array === value
  cookie = Utils.escape(key) + "=" +
    value.map { |v| Utils.escape v }.join("&") +
    "#{domain}#{path}#{expires}#{secure}"

  case self["Set-Cookie"]
  when Array
    self["Set-Cookie"] << cookie
  when String
    self["Set-Cookie"] = [self["Set-Cookie"], cookie]
  when nil
    self["Set-Cookie"] = cookie
  end
end