A class for parsing and generating HTTP cookies
RFC 2109: HTTP State Management MechanismWhen it sends a request to an origin server, the user agent sends a Cookie request header to the origin server if it has cookies that are applicable to the request, based on
* the request-host; * the request-URI; * the cookie's age.
The syntax for the header is:
cookie = "Cookie:" cookie-version
1*((";" | ",") cookie-value)
cookie-value = NAME "=" VALUE [";" path] [";" domain] cookie-version = "$Version" "=" value NAME = attr VALUE = value path = "$Path" "=" value domain = "$Domain" "=" value
RFC2068: Hypertext Transfer Protocol -- HTTP/1.1CTL = <any US-ASCII control character
(octets 0 - 31) and DEL (127)>
token = 1*<any CHAR except CTLs or tspecials>
tspecials = "(" | ")" | "<" | ">" | "@"
| "," | ";" | ":" | "\" | <"> | "/" | "[" | "]" | "?" | "=" | "{" | "}" | SP | HT
Strip surrounding double quotes from a copy of the specified string and return it.
# File /Users/ged/source/ruby/Arrow/lib/arrow/cookie.rb, line 48 48: def self::dequote( string ) 49: /^"((?:[^"]+|\\.)*)"/.match( string ) ? $1 : string.dup 50: end
Create a new Arrow::Cookie object with the specified name and values.
# File /Users/ged/source/ruby/Arrow/lib/arrow/cookie.rb, line 157 157: def initialize( name, values, options={} ) 158: values = [ values ] unless values.is_a?( Array ) 159: @name = name 160: @values = values 161: 162: @domain = nil 163: @path = nil 164: @secure = false 165: @comment = nil 166: @max_age = nil 167: @expires = nil 168: @version = 0 169: 170: options.each do |meth, val| 171: self.__send__( "#{meth}=", val ) 172: end 173: end
Parse the specified ‘Cookie:’ header value and return a Hash of one or more new Arrow::Cookie objects, keyed by name.
# File /Users/ged/source/ruby/Arrow/lib/arrow/cookie.rb, line 102 102: def self::parse( header ) 103: return {} if header.nil? or header.empty? 104: Arrow::Logger[self].debug "Parsing cookie header: %p" % [ header ] 105: cookies = [] 106: version = 0 107: header = header.strip 108: 109: # "$Version" = value 110: if CookieVersion.match( header ) 111: Arrow::Logger[self].debug " Found cookie version %p" % [ $1 ] 112: version = Integer( dequote($1) ) 113: header.slice!( CookieVersion ) 114: end 115: 116: # 1*((";" | ",") NAME "=" VALUE [";" path] [";" domain]) 117: header.split( /[,;]\s*/ ).each do |pair| 118: Arrow::Logger[self].debug " Found pair %p" % [ pair ] 119: key, valstr = pair.split( /=/, 2 ).collect {|s| s.strip } 120: 121: case key 122: when CookiePath 123: Arrow::Logger[self].debug " -> cookie-path %p" % [ valstr ] 124: cookies.last.path = dequote( valstr ) unless cookies.empty? 125: 126: when CookieDomain 127: Arrow::Logger[self].debug " -> cookie-domain %p" % [ valstr ] 128: cookies.last.domain = dequote( valstr ) unless cookies.empty? 129: 130: when HTTPToken 131: values = parse_valuestring( valstr ) 132: Arrow::Logger[self].debug " -> cookie-values %p" % [ values ] 133: cookies << new( key, values, :version => version ) 134: 135: else 136: Arrow::Logger[self].warning \ 137: "Malformed cookie header %p: %p is not a valid token; ignoring" % 138: [ header, key ] 139: end 140: end 141: 142: # Turn the array into a Hash, ignoring all but the first instance of 143: # a cookie with the same name 144: return cookies.inject({}) do |hash,cookie| 145: hash[cookie.name] = cookie unless hash.key?( cookie.name ) 146: hash 147: end 148: end
Parse a cookie value string, returning an Array of Strings
# File /Users/ged/source/ruby/Arrow/lib/arrow/cookie.rb, line 54 54: def self::parse_valuestring( valstr ) 55: return [] unless valstr 56: valstr = dequote( valstr ) 57: 58: return valstr.split('&').collect{|str| URI.unescape(str) } 59: end
Set the domain for which the cookie is valid.
# File /Users/ged/source/ruby/Arrow/lib/arrow/cookie.rb, line 233 233: def domain=( newdomain ) 234: newdomain = ".#{newdomain}" unless newdomain[0] == ?. 235: @domain = newdomain.dup 236: end
Return true if other_cookie has the same name as the receiver.
# File /Users/ged/source/ruby/Arrow/lib/arrow/cookie.rb, line 301 301: def eql?( other_cookie ) 302: return (self.name == other_cookie.name) ? true : false 303: end
Set the cookie expiration to a time in the past
# File /Users/ged/source/ruby/Arrow/lib/arrow/cookie.rb, line 277 277: def expire! 278: self.expires = Time.at(0) 279: end
Set the cookie‘s expires field. The value can be either a Time object or a String in any of the following formats:
+30s: | 30 seconds from now |
+10m: | ten minutes from now |
+1h: | one hour from now |
-1d: | yesterday (i.e. "ASAP!") |
now: | immediately |
+3M: | in three months |
+10y: | in ten years time |
Thursday, 25-Apr-1999 00:40:33 GMT: | at the indicated time & date |
# File /Users/ged/source/ruby/Arrow/lib/arrow/cookie.rb, line 257 257: def expires=( time ) 258: case time 259: when NilClass 260: @expires = nil 261: 262: when Date 263: @expires = Time.parse( time.ctime ) 264: 265: when Time 266: @expires = time 267: 268: else 269: @expires = parse_time_delta( time ) 270: end 271: rescue => err 272: raise err, caller(1) 273: end
Set the lifetime of the cookie. The value is a decimal non-negative integer. After delta_seconds seconds elapse, the client should discard the cookie. A value of zero means the cookie should be discarded immediately.
# File /Users/ged/source/ruby/Arrow/lib/arrow/cookie.rb, line 227 227: def max_age=( delta_seconds ) 228: @max_age = Integer( delta_seconds ) 229: end
Returns true if the secure flag is set
# File /Users/ged/source/ruby/Arrow/lib/arrow/cookie.rb, line 219 219: def secure? 220: return @secure ? true : false 221: end
Return the cookie as a String
# File /Users/ged/source/ruby/Arrow/lib/arrow/cookie.rb, line 284 284: def to_s 285: rval = "%s=%s" % [ self.name, make_valuestring(self.values) ] 286: 287: rval << make_field( "Version", self.version ) if self.version.nonzero? 288: rval << make_field( "Domain", self.domain ) 289: rval << make_field( "Expires", make_cookiedate(self.expires) ) if self.expires 290: rval << make_field( "Max-Age", self.max_age ) 291: rval << make_field( "Comment", self.comment ) 292: rval << make_field( "Path", self.path ) 293: 294: rval << "; " << "Secure" if self.secure? 295: 296: return rval 297: end
Return the first value stored in the cookie as a String.
# File /Users/ged/source/ruby/Arrow/lib/arrow/cookie.rb, line 213 213: def value 214: @values.first 215: end
--- SEC00037
--- ""
--- - name: comment rw: RW a_desc: |+ Because cookies can contain private information about a user, the <a href="Cookie.html">Cookie</a> attribute allows an origin server to document its intended use of a cookie. The user can inspect the information to decide whether to initiate or continue a session with this cookie. - name: domain rw: R a_desc: |+ The domain the cookie belongs to - name: expires rw: R a_desc: |+ The cookie‘s expiration (a Time object) - name: max_age rw: R a_desc: |+ The lifetime of the cookie, in seconds. - name: name rw: RW a_desc: |+ The name of the cookie - name: path rw: RW a_desc: |+ The path the cookie applies to - name: secure rw: W a_desc: |+ The cookie‘s ‘secure’ flag. - name: values rw: RW a_desc: |+ The Array of cookie values - name: version rw: RW a_desc: |+ The cookie version. 0 (the default) is fine for most uses
--- - methods: - visibility: public aref: M000539 name: dequote sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/cookie.rb, line 48</span>\n\ 48: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-keyword kw\">self</span><span class=\"ruby-operator\">::</span><span class=\"ruby-identifier\">dequote</span>( <span class=\"ruby-identifier\">string</span> )\n\ 49: <span class=\"ruby-regexp re\">/^"((?:[^"]+|\\\\.)*)"/</span>.<span class=\"ruby-identifier\">match</span>( <span class=\"ruby-identifier\">string</span> ) <span class=\"ruby-operator\">?</span> <span class=\"ruby-identifier\">$1</span> <span class=\"ruby-operator\">:</span> <span class=\"ruby-identifier\">string</span>.<span class=\"ruby-identifier\">dup</span>\n\ 50: <span class=\"ruby-keyword kw\">end</span>" m_desc: |- <p> Strip surrounding double quotes from a copy of the specified string and return it. </p> params: ( string ) - visibility: public aref: M000542 name: new sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/cookie.rb, line 157</span>\n\ 157: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-identifier\">initialize</span>( <span class=\"ruby-identifier\">name</span>, <span class=\"ruby-identifier\">values</span>, <span class=\"ruby-identifier\">options</span>={} )\n\ 158: <span class=\"ruby-identifier\">values</span> = [ <span class=\"ruby-identifier\">values</span> ] <span class=\"ruby-keyword kw\">unless</span> <span class=\"ruby-identifier\">values</span>.<span class=\"ruby-identifier\">is_a?</span>( <span class=\"ruby-constant\">Array</span> )\n\ 159: <span class=\"ruby-ivar\">@name</span> = <span class=\"ruby-identifier\">name</span>\n\ 160: <span class=\"ruby-ivar\">@values</span> = <span class=\"ruby-identifier\">values</span>\n\ 161: \n\ 162: <span class=\"ruby-ivar\">@domain</span> = <span class=\"ruby-keyword kw\">nil</span>\n\ 163: <span class=\"ruby-ivar\">@path</span> = <span class=\"ruby-keyword kw\">nil</span>\n\ 164: <span class=\"ruby-ivar\">@secure</span> = <span class=\"ruby-keyword kw\">false</span>\n\ 165: <span class=\"ruby-ivar\">@comment</span> = <span class=\"ruby-keyword kw\">nil</span>\n\ 166: <span class=\"ruby-ivar\">@max_age</span> = <span class=\"ruby-keyword kw\">nil</span>\n\ 167: <span class=\"ruby-ivar\">@expires</span> = <span class=\"ruby-keyword kw\">nil</span>\n\ 168: <span class=\"ruby-ivar\">@version</span> = <span class=\"ruby-value\">0</span>\n\ 169: \n\ 170: <span class=\"ruby-identifier\">options</span>.<span class=\"ruby-identifier\">each</span> <span class=\"ruby-keyword kw\">do</span> <span class=\"ruby-operator\">|</span><span class=\"ruby-identifier\">meth</span>, <span class=\"ruby-identifier\">val</span><span class=\"ruby-operator\">|</span>\n\ 171: <span class=\"ruby-keyword kw\">self</span>.<span class=\"ruby-identifier\">__send__</span>( <span class=\"ruby-node\">"#{meth}="</span>, <span class=\"ruby-identifier\">val</span> )\n\ 172: <span class=\"ruby-keyword kw\">end</span>\n\ 173: <span class=\"ruby-keyword kw\">end</span>" m_desc: |- <p> Create a <a href="Cookie.html#M000542">new</a> <a href="Cookie.html">Arrow::Cookie</a> object with the specified <tt>name</tt> and <tt>values</tt>. </p> params: ( name, values, options={} ) - visibility: public aref: M000541 name: parse sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/cookie.rb, line 102</span>\n\ 102: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-keyword kw\">self</span><span class=\"ruby-operator\">::</span><span class=\"ruby-identifier\">parse</span>( <span class=\"ruby-identifier\">header</span> )\n\ 103: <span class=\"ruby-keyword kw\">return</span> {} <span class=\"ruby-keyword kw\">if</span> <span class=\"ruby-identifier\">header</span>.<span class=\"ruby-identifier\">nil?</span> <span class=\"ruby-keyword kw\">or</span> <span class=\"ruby-identifier\">header</span>.<span class=\"ruby-identifier\">empty?</span>\n\ 104: <span class=\"ruby-constant\">Arrow</span><span class=\"ruby-operator\">::</span><span class=\"ruby-constant\">Logger</span>[<span class=\"ruby-keyword kw\">self</span>].<span class=\"ruby-identifier\">debug</span> <span class=\"ruby-value str\">"Parsing cookie header: %p"</span> <span class=\"ruby-operator\">%</span> [ <span class=\"ruby-identifier\">header</span> ]\n\ 105: <span class=\"ruby-identifier\">cookies</span> = []\n\ 106: <span class=\"ruby-identifier\">version</span> = <span class=\"ruby-value\">0</span>\n\ 107: <span class=\"ruby-identifier\">header</span> = <span class=\"ruby-identifier\">header</span>.<span class=\"ruby-identifier\">strip</span>\n\ 108: \n\ 109: <span class=\"ruby-comment cmt\"># "$Version" = value</span>\n\ 110: <span class=\"ruby-keyword kw\">if</span> <span class=\"ruby-constant\">CookieVersion</span>.<span class=\"ruby-identifier\">match</span>( <span class=\"ruby-identifier\">header</span> )\n\ 111: <span class=\"ruby-constant\">Arrow</span><span class=\"ruby-operator\">::</span><span class=\"ruby-constant\">Logger</span>[<span class=\"ruby-keyword kw\">self</span>].<span class=\"ruby-identifier\">debug</span> <span class=\"ruby-value str\">" Found cookie version %p"</span> <span class=\"ruby-operator\">%</span> [ <span class=\"ruby-identifier\">$1</span> ]\n\ 112: <span class=\"ruby-identifier\">version</span> = <span class=\"ruby-constant\">Integer</span>( <span class=\"ruby-identifier\">dequote</span>(<span class=\"ruby-identifier\">$1</span>) )\n\ 113: <span class=\"ruby-identifier\">header</span>.<span class=\"ruby-identifier\">slice!</span>( <span class=\"ruby-constant\">CookieVersion</span> )\n\ 114: <span class=\"ruby-keyword kw\">end</span>\n\ 115: \n\ 116: <span class=\"ruby-comment cmt\"># 1*((";" | ",") NAME "=" VALUE [";" path] [";" domain])</span>\n\ 117: <span class=\"ruby-identifier\">header</span>.<span class=\"ruby-identifier\">split</span>( <span class=\"ruby-regexp re\">/[,;]\\s*/</span> ).<span class=\"ruby-identifier\">each</span> <span class=\"ruby-keyword kw\">do</span> <span class=\"ruby-operator\">|</span><span class=\"ruby-identifier\">pair</span><span class=\"ruby-operator\">|</span>\n\ 118: <span class=\"ruby-constant\">Arrow</span><span class=\"ruby-operator\">::</span><span class=\"ruby-constant\">Logger</span>[<span class=\"ruby-keyword kw\">self</span>].<span class=\"ruby-identifier\">debug</span> <span class=\"ruby-value str\">" Found pair %p"</span> <span class=\"ruby-operator\">%</span> [ <span class=\"ruby-identifier\">pair</span> ]\n\ 119: <span class=\"ruby-identifier\">key</span>, <span class=\"ruby-identifier\">valstr</span> = <span class=\"ruby-identifier\">pair</span>.<span class=\"ruby-identifier\">split</span>( <span class=\"ruby-regexp re\">/=/</span>, <span class=\"ruby-value\">2</span> ).<span class=\"ruby-identifier\">collect</span> {<span class=\"ruby-operator\">|</span><span class=\"ruby-identifier\">s</span><span class=\"ruby-operator\">|</span> <span class=\"ruby-identifier\">s</span>.<span class=\"ruby-identifier\">strip</span> }\n\ 120: \n\ 121: <span class=\"ruby-keyword kw\">case</span> <span class=\"ruby-identifier\">key</span>\n\ 122: <span class=\"ruby-keyword kw\">when</span> <span class=\"ruby-constant\">CookiePath</span>\n\ 123: <span class=\"ruby-constant\">Arrow</span><span class=\"ruby-operator\">::</span><span class=\"ruby-constant\">Logger</span>[<span class=\"ruby-keyword kw\">self</span>].<span class=\"ruby-identifier\">debug</span> <span class=\"ruby-value str\">" -> cookie-path %p"</span> <span class=\"ruby-operator\">%</span> [ <span class=\"ruby-identifier\">valstr</span> ]\n\ 124: <span class=\"ruby-identifier\">cookies</span>.<span class=\"ruby-identifier\">last</span>.<span class=\"ruby-identifier\">path</span> = <span class=\"ruby-identifier\">dequote</span>( <span class=\"ruby-identifier\">valstr</span> ) <span class=\"ruby-keyword kw\">unless</span> <span class=\"ruby-identifier\">cookies</span>.<span class=\"ruby-identifier\">empty?</span>\n\ 125: \n\ 126: <span class=\"ruby-keyword kw\">when</span> <span class=\"ruby-constant\">CookieDomain</span>\n\ 127: <span class=\"ruby-constant\">Arrow</span><span class=\"ruby-operator\">::</span><span class=\"ruby-constant\">Logger</span>[<span class=\"ruby-keyword kw\">self</span>].<span class=\"ruby-identifier\">debug</span> <span class=\"ruby-value str\">" -> cookie-domain %p"</span> <span class=\"ruby-operator\">%</span> [ <span class=\"ruby-identifier\">valstr</span> ]\n\ 128: <span class=\"ruby-identifier\">cookies</span>.<span class=\"ruby-identifier\">last</span>.<span class=\"ruby-identifier\">domain</span> = <span class=\"ruby-identifier\">dequote</span>( <span class=\"ruby-identifier\">valstr</span> ) <span class=\"ruby-keyword kw\">unless</span> <span class=\"ruby-identifier\">cookies</span>.<span class=\"ruby-identifier\">empty?</span>\n\ 129: \n\ 130: <span class=\"ruby-keyword kw\">when</span> <span class=\"ruby-constant\">HTTPToken</span>\n\ 131: <span class=\"ruby-identifier\">values</span> = <span class=\"ruby-identifier\">parse_valuestring</span>( <span class=\"ruby-identifier\">valstr</span> )\n\ 132: <span class=\"ruby-constant\">Arrow</span><span class=\"ruby-operator\">::</span><span class=\"ruby-constant\">Logger</span>[<span class=\"ruby-keyword kw\">self</span>].<span class=\"ruby-identifier\">debug</span> <span class=\"ruby-value str\">" -> cookie-values %p"</span> <span class=\"ruby-operator\">%</span> [ <span class=\"ruby-identifier\">values</span> ]\n\ 133: <span class=\"ruby-identifier\">cookies</span> <span class=\"ruby-operator\"><<</span> <span class=\"ruby-identifier\">new</span>( <span class=\"ruby-identifier\">key</span>, <span class=\"ruby-identifier\">values</span>, <span class=\"ruby-identifier\">:version</span> =<span class=\"ruby-operator\">></span> <span class=\"ruby-identifier\">version</span> )\n\ 134: \n\ 135: <span class=\"ruby-keyword kw\">else</span>\n\ 136: <span class=\"ruby-constant\">Arrow</span><span class=\"ruby-operator\">::</span><span class=\"ruby-constant\">Logger</span>[<span class=\"ruby-keyword kw\">self</span>].<span class=\"ruby-identifier\">warning</span> \\\n\ 137: <span class=\"ruby-value str\">"Malformed cookie header %p: %p is not a valid token; ignoring"</span> <span class=\"ruby-operator\">%</span>\n\ 138: [ <span class=\"ruby-identifier\">header</span>, <span class=\"ruby-identifier\">key</span> ]\n\ 139: <span class=\"ruby-keyword kw\">end</span>\n\ 140: <span class=\"ruby-keyword kw\">end</span>\n\ 141: \n\ 142: <span class=\"ruby-comment cmt\"># Turn the array into a Hash, ignoring all but the first instance of</span>\n\ 143: <span class=\"ruby-comment cmt\"># a cookie with the same name</span>\n\ 144: <span class=\"ruby-keyword kw\">return</span> <span class=\"ruby-identifier\">cookies</span>.<span class=\"ruby-identifier\">inject</span>({}) <span class=\"ruby-keyword kw\">do</span> <span class=\"ruby-operator\">|</span><span class=\"ruby-identifier\">hash</span>,<span class=\"ruby-identifier\">cookie</span><span class=\"ruby-operator\">|</span>\n\ 145: <span class=\"ruby-identifier\">hash</span>[<span class=\"ruby-identifier\">cookie</span>.<span class=\"ruby-identifier\">name</span>] = <span class=\"ruby-identifier\">cookie</span> <span class=\"ruby-keyword kw\">unless</span> <span class=\"ruby-identifier\">hash</span>.<span class=\"ruby-identifier\">key?</span>( <span class=\"ruby-identifier\">cookie</span>.<span class=\"ruby-identifier\">name</span> )\n\ 146: <span class=\"ruby-identifier\">hash</span>\n\ 147: <span class=\"ruby-keyword kw\">end</span>\n\ 148: <span class=\"ruby-keyword kw\">end</span>" m_desc: |- <p> Parse the specified ‘<a href="Cookie.html">Cookie</a>:’ <tt>header</tt> <a href="Cookie.html#M000543">value</a> and return a Hash of one or more <a href="Cookie.html#M000542">new</a> <a href="Cookie.html">Arrow::Cookie</a> objects, keyed by name. </p> params: ( header ) - visibility: public aref: M000540 name: parse_valuestring sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/cookie.rb, line 54</span>\n\ 54: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-keyword kw\">self</span><span class=\"ruby-operator\">::</span><span class=\"ruby-identifier\">parse_valuestring</span>( <span class=\"ruby-identifier\">valstr</span> )\n\ 55: <span class=\"ruby-keyword kw\">return</span> [] <span class=\"ruby-keyword kw\">unless</span> <span class=\"ruby-identifier\">valstr</span>\n\ 56: <span class=\"ruby-identifier\">valstr</span> = <span class=\"ruby-identifier\">dequote</span>( <span class=\"ruby-identifier\">valstr</span> )\n\ 57: \n\ 58: <span class=\"ruby-keyword kw\">return</span> <span class=\"ruby-identifier\">valstr</span>.<span class=\"ruby-identifier\">split</span>(<span class=\"ruby-value str\">'&'</span>).<span class=\"ruby-identifier\">collect</span>{<span class=\"ruby-operator\">|</span><span class=\"ruby-identifier\">str</span><span class=\"ruby-operator\">|</span> <span class=\"ruby-constant\">URI</span>.<span class=\"ruby-identifier\">unescape</span>(<span class=\"ruby-identifier\">str</span>) }\n\ 59: <span class=\"ruby-keyword kw\">end</span>" m_desc: |- <p> Parse a cookie <a href="Cookie.html#M000543">value</a> string, returning an Array of Strings </p> params: ( valstr ) category: Class type: Public - methods: - visibility: public aref: M000546 name: domain= sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/cookie.rb, line 233</span>\n\ 233: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-identifier\">domain=</span>( <span class=\"ruby-identifier\">newdomain</span> )\n\ 234: <span class=\"ruby-identifier\">newdomain</span> = <span class=\"ruby-node\">".#{newdomain}"</span> <span class=\"ruby-keyword kw\">unless</span> <span class=\"ruby-identifier\">newdomain</span>[<span class=\"ruby-value\">0</span>] <span class=\"ruby-operator\">==</span> <span class=\"ruby-value\">?.</span>\n\ 235: <span class=\"ruby-ivar\">@domain</span> = <span class=\"ruby-identifier\">newdomain</span>.<span class=\"ruby-identifier\">dup</span>\n\ 236: <span class=\"ruby-keyword kw\">end</span>" m_desc: |- <p> Set the domain for which the cookie is valid. </p> params: ( newdomain ) - visibility: public aref: M000550 name: eql? sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/cookie.rb, line 301</span>\n\ 301: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-identifier\">eql?</span>( <span class=\"ruby-identifier\">other_cookie</span> )\n\ 302: <span class=\"ruby-keyword kw\">return</span> (<span class=\"ruby-keyword kw\">self</span>.<span class=\"ruby-identifier\">name</span> <span class=\"ruby-operator\">==</span> <span class=\"ruby-identifier\">other_cookie</span>.<span class=\"ruby-identifier\">name</span>) <span class=\"ruby-operator\">?</span> <span class=\"ruby-keyword kw\">true</span> <span class=\"ruby-operator\">:</span> <span class=\"ruby-keyword kw\">false</span>\n\ 303: <span class=\"ruby-keyword kw\">end</span>" m_desc: |- <p> Return <tt>true</tt> if other_cookie has the same name as the receiver. </p> params: ( other_cookie ) - visibility: public aref: M000548 name: expire! sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/cookie.rb, line 277</span>\n\ 277: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-identifier\">expire!</span>\n\ 278: <span class=\"ruby-keyword kw\">self</span>.<span class=\"ruby-identifier\">expires</span> = <span class=\"ruby-constant\">Time</span>.<span class=\"ruby-identifier\">at</span>(<span class=\"ruby-value\">0</span>)\n\ 279: <span class=\"ruby-keyword kw\">end</span>" m_desc: |- <p> Set the cookie expiration to a time in the past </p> params: () - visibility: public aref: M000547 name: expires= sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/cookie.rb, line 257</span>\n\ 257: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-identifier\">expires=</span>( <span class=\"ruby-identifier\">time</span> )\n\ 258: <span class=\"ruby-keyword kw\">case</span> <span class=\"ruby-identifier\">time</span>\n\ 259: <span class=\"ruby-keyword kw\">when</span> <span class=\"ruby-constant\">NilClass</span>\n\ 260: <span class=\"ruby-ivar\">@expires</span> = <span class=\"ruby-keyword kw\">nil</span>\n\ 261: \n\ 262: <span class=\"ruby-keyword kw\">when</span> <span class=\"ruby-constant\">Date</span>\n\ 263: <span class=\"ruby-ivar\">@expires</span> = <span class=\"ruby-constant\">Time</span>.<span class=\"ruby-identifier\">parse</span>( <span class=\"ruby-identifier\">time</span>.<span class=\"ruby-identifier\">ctime</span> )\n\ 264: \n\ 265: <span class=\"ruby-keyword kw\">when</span> <span class=\"ruby-constant\">Time</span>\n\ 266: <span class=\"ruby-ivar\">@expires</span> = <span class=\"ruby-identifier\">time</span>\n\ 267: \n\ 268: <span class=\"ruby-keyword kw\">else</span>\n\ 269: <span class=\"ruby-ivar\">@expires</span> = <span class=\"ruby-identifier\">parse_time_delta</span>( <span class=\"ruby-identifier\">time</span> )\n\ 270: <span class=\"ruby-keyword kw\">end</span>\n\ 271: <span class=\"ruby-keyword kw\">rescue</span> =<span class=\"ruby-operator\">></span> <span class=\"ruby-identifier\">err</span>\n\ 272: <span class=\"ruby-identifier\">raise</span> <span class=\"ruby-identifier\">err</span>, <span class=\"ruby-identifier\">caller</span>(<span class=\"ruby-value\">1</span>)\n\ 273: <span class=\"ruby-keyword kw\">end</span>" m_desc: |- <p> Set the cookie‘s expires field. The <a href="Cookie.html#M000543">value</a> can be either a Time object or a String in any of the following formats: </p> <table> <tr><td valign="top">+30s:</td><td>30 seconds from now </td></tr> <tr><td valign="top">+10m:</td><td>ten minutes from now </td></tr> <tr><td valign="top">+1h:</td><td>one hour from now </td></tr> <tr><td valign="top">-1d:</td><td>yesterday (i.e. "ASAP!") </td></tr> <tr><td valign="top">now:</td><td>immediately </td></tr> <tr><td valign="top">+3M:</td><td>in three months </td></tr> <tr><td valign="top">+10y:</td><td>in ten years time </td></tr> <tr><td valign="top">Thursday, 25-Apr-1999 00:40:33 GMT:</td><td>at the indicated time & date </td></tr> </table> params: ( time ) - visibility: public aref: M000551 name: hash sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/cookie.rb, line 307</span>\n\ 307: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-identifier\">hash</span>\n\ 308: <span class=\"ruby-keyword kw\">return</span> <span class=\"ruby-keyword kw\">self</span>.<span class=\"ruby-identifier\">name</span>.<span class=\"ruby-identifier\">hash</span>\n\ 309: <span class=\"ruby-keyword kw\">end</span>" m_desc: |- <p> Generate a Fixnum <a href="Cookie.html#M000551">hash</a> <a href="Cookie.html#M000543">value</a> for this object. Uses the <a href="Cookie.html#M000551">hash</a> of the cookie‘s name. </p> params: () - visibility: public aref: M000545 name: max_age= sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/cookie.rb, line 227</span>\n\ 227: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-identifier\">max_age=</span>( <span class=\"ruby-identifier\">delta_seconds</span> )\n\ 228: <span class=\"ruby-ivar\">@max_age</span> = <span class=\"ruby-constant\">Integer</span>( <span class=\"ruby-identifier\">delta_seconds</span> )\n\ 229: <span class=\"ruby-keyword kw\">end</span>" m_desc: |- <p> Set the lifetime of the cookie. The <a href="Cookie.html#M000543">value</a> is a decimal non-negative integer. After <tt>delta_seconds</tt> seconds elapse, the client should discard the cookie. A <a href="Cookie.html#M000543">value</a> of zero means the cookie should be discarded immediately. </p> params: ( delta_seconds ) - visibility: public aref: M000544 name: secure? sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/cookie.rb, line 219</span>\n\ 219: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-identifier\">secure?</span>\n\ 220: <span class=\"ruby-keyword kw\">return</span> <span class=\"ruby-ivar\">@secure</span> <span class=\"ruby-operator\">?</span> <span class=\"ruby-keyword kw\">true</span> <span class=\"ruby-operator\">:</span> <span class=\"ruby-keyword kw\">false</span>\n\ 221: <span class=\"ruby-keyword kw\">end</span>" m_desc: |- <p> Returns <tt>true</tt> if the secure flag is set </p> params: () - visibility: public aref: M000549 name: to_s sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/cookie.rb, line 284</span>\n\ 284: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-identifier\">to_s</span>\n\ 285: <span class=\"ruby-identifier\">rval</span> = <span class=\"ruby-value str\">"%s=%s"</span> <span class=\"ruby-operator\">%</span> [ <span class=\"ruby-keyword kw\">self</span>.<span class=\"ruby-identifier\">name</span>, <span class=\"ruby-identifier\">make_valuestring</span>(<span class=\"ruby-keyword kw\">self</span>.<span class=\"ruby-identifier\">values</span>) ]\n\ 286: \n\ 287: <span class=\"ruby-identifier\">rval</span> <span class=\"ruby-operator\"><<</span> <span class=\"ruby-identifier\">make_field</span>( <span class=\"ruby-value str\">"Version"</span>, <span class=\"ruby-keyword kw\">self</span>.<span class=\"ruby-identifier\">version</span> ) <span class=\"ruby-keyword kw\">if</span> <span class=\"ruby-keyword kw\">self</span>.<span class=\"ruby-identifier\">version</span>.<span class=\"ruby-identifier\">nonzero?</span>\n\ 288: <span class=\"ruby-identifier\">rval</span> <span class=\"ruby-operator\"><<</span> <span class=\"ruby-identifier\">make_field</span>( <span class=\"ruby-value str\">"Domain"</span>, <span class=\"ruby-keyword kw\">self</span>.<span class=\"ruby-identifier\">domain</span> )\n\ 289: <span class=\"ruby-identifier\">rval</span> <span class=\"ruby-operator\"><<</span> <span class=\"ruby-identifier\">make_field</span>( <span class=\"ruby-value str\">"Expires"</span>, <span class=\"ruby-identifier\">make_cookiedate</span>(<span class=\"ruby-keyword kw\">self</span>.<span class=\"ruby-identifier\">expires</span>) ) <span class=\"ruby-keyword kw\">if</span> <span class=\"ruby-keyword kw\">self</span>.<span class=\"ruby-identifier\">expires</span>\n\ 290: <span class=\"ruby-identifier\">rval</span> <span class=\"ruby-operator\"><<</span> <span class=\"ruby-identifier\">make_field</span>( <span class=\"ruby-value str\">"Max-Age"</span>, <span class=\"ruby-keyword kw\">self</span>.<span class=\"ruby-identifier\">max_age</span> )\n\ 291: <span class=\"ruby-identifier\">rval</span> <span class=\"ruby-operator\"><<</span> <span class=\"ruby-identifier\">make_field</span>( <span class=\"ruby-value str\">"Comment"</span>, <span class=\"ruby-keyword kw\">self</span>.<span class=\"ruby-identifier\">comment</span> )\n\ 292: <span class=\"ruby-identifier\">rval</span> <span class=\"ruby-operator\"><<</span> <span class=\"ruby-identifier\">make_field</span>( <span class=\"ruby-value str\">"Path"</span>, <span class=\"ruby-keyword kw\">self</span>.<span class=\"ruby-identifier\">path</span> )\n\ 293: \n\ 294: <span class=\"ruby-identifier\">rval</span> <span class=\"ruby-operator\"><<</span> <span class=\"ruby-value str\">"; "</span> <span class=\"ruby-operator\"><<</span> <span class=\"ruby-value str\">"Secure"</span> <span class=\"ruby-keyword kw\">if</span> <span class=\"ruby-keyword kw\">self</span>.<span class=\"ruby-identifier\">secure?</span>\n\ 295: \n\ 296: <span class=\"ruby-keyword kw\">return</span> <span class=\"ruby-identifier\">rval</span>\n\ 297: <span class=\"ruby-keyword kw\">end</span>" m_desc: |- <p> Return the cookie as a String </p> params: () - visibility: public aref: M000543 name: value sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/cookie.rb, line 213</span>\n\ 213: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-identifier\">value</span>\n\ 214: <span class=\"ruby-ivar\">@values</span>.<span class=\"ruby-identifier\">first</span>\n\ 215: <span class=\"ruby-keyword kw\">end</span>" m_desc: |- <p> Return the first <a href="Cookie.html#M000543">value</a> stored in the cookie as a String. </p> params: () category: Instance type: Public
---
--- - name: SVNRev desc: |+ SVN Revision value: "%q$Rev: 406 $" - name: SVNId desc: |+ SVN Id value: "%q$Id: cookie.rb 406 2007-07-18 17:01:59Z bbleything $" - name: CookieDateFormat value: "'%a, %d-%b-%Y %H:%M:%S GMT'" - name: CookieVersion desc: | <pre> RFC 2109: HTTP State Management Mechanism </pre> When it sends a request to an origin server, the user agent sends a <a href="Cookie.html">Cookie</a> request header to the origin server if it has cookies that are applicable to the request, based on <pre> * the request-host; * the request-URI; * the cookie's age. </pre> <p> The syntax for the header is: </p> <p> cookie = "<a href="Cookie.html">Cookie</a>:" cookie-version </p> <pre> 1*((";" | ",") cookie-value) </pre> <p> cookie-<a href="Cookie.html#M000543">value</a> = NAME "=" VALUE [";" path] [";" domain] cookie-version = "$Version" "=" <a href="Cookie.html#M000543">value</a> NAME = attr VALUE = <a href="Cookie.html#M000543">value</a> path = "$<a href="../Path.html">Path</a>" "=" <a href="Cookie.html#M000543">value</a> domain = "$Domain" "=" <a href="Cookie.html#M000543">value</a> </p> value: /\$Version\s*=\s*(.+)\s*[,;]/ - name: CookiePath value: /\$Path/i - name: CookieDomain value: /\$Domain/i - name: CTLs desc: | <pre> RFC2068: Hypertext Transfer Protocol -- HTTP/1.1 </pre> CTL = <any US-ASCII control character <pre> (octets 0 - 31) and DEL (127)> </pre> <p> token = 1*<any CHAR except CTLs or tspecials> </p> <p> tspecials = "(" | ")" | "<" | ">" | "@" </p> <pre> | "," | ";" | ":" | "\" | <"> | "/" | "[" | "]" | "?" | "=" | "{" | "}" | SP | HT </pre> value: ""[:cntrl:]"" - name: TSpecials value: Regexp.quote ' "(),/:;<=>?@[\\]{}' - name: NonTokenChar value: /[#{CTLs}#{TSpecials}]/s - name: HTTPToken value: /\A[^#{CTLs}#{TSpecials}]+\z/s - name: Seconds desc: |+ Number of seconds in the various offset types value: "{ 's' => 1, 'm' => 60, 'h' => 60*60, 'd' => 60*60*24, 'M' => 60*60*24*30, 'y' => 60*60*24*365, }"
Generated with the Darkfish Rdoc Generator.