Created
July 23, 2008 17:37
-
-
Save ryantm/1824 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
ryan@rtmlap:~/rb/code/test$ ruby ~/test.rb | |
The Cookies: | |
phpbb3_q3k1i_u=1; expires=Thu, 23-Jul-2009 17:27:04 GMT; path=/; domain=.brawlsnapshots.com; HttpOnly, phpbb3_q3k1i_k=; expires=Thu, 23-Jul-2009 17:27:04 GMT; path=/; domain=.brawlsnapshots.com; HttpOnly, phpbb3_q3k1i_sid=3c2ab8dae46098004b66dcd2ff6c3180; expires=Thu, 23-Jul-2009 17:27:04 GMT; path=/; domain=.brawlsnapshots.com; HttpOnly, phpbb3_q3k1i_u=1000; expires=Thu, 23-Jul-2009 17:27:04 GMT; path=/; domain=.brawlsnapshots.com; HttpOnly, phpbb3_q3k1i_k=c06c23e2a199173a; expires=Thu, 23-Jul-2009 17:27:04 GMT; path=/; domain=.brawlsnapshots.com; HttpOnly, phpbb3_q3k1i_sid=85d32e487ffd5bc8fad948e327866597; expires=Thu, 23-Jul-2009 17:27:04 GMT; path=/; domain=.brawlsnapshots.com; HttpOnly | |
Ruby says: | |
{"phpbb3_q3k1i_sid"=>["3c2ab8dae46098004b66dcd2ff6c3180", "85d32e487ffd5bc8fad948e327866597"], "expires"=>["Thu", "Thu", "Thu", "Thu", "Thu", "Thu"], "domain"=>[".brawlsnapshots.com", ".brawlsnapshots.com", ".brawlsnapshots.com", ".brawlsnapshots.com", ".brawlsnapshots.com", ".brawlsnapshots.com"], "phpbb3_q3k1i_u"=>["1", "1000"], "phpbb3_q3k1i_k"=>["c06c23e2a199173a"], "path"=>["/", "/", "/", "/", "/", "/"]} | |
Rails says: | |
{"phpbb3_q3k1i_sid"=>["3c2ab8dae46098004b66dcd2ff6c3180"], "expires"=>["Thu"], "domain"=>[".brawlsnapshots.com"], "phpbb3_q3k1i_u"=>["1"], "phpbb3_q3k1i_k"=>[], "path"=>["/"]} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'cgi' | |
# File lib/cgi.rb, line 875 | |
# 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 | |
asetcookie = "phpbb3_q3k1i_u=1; expires=Thu, 23-Jul-2009 17:27:04 GMT; path=/; domain=.brawlsnapshots.com; HttpOnly, phpbb3_q3k1i_k=; expires=Thu, 23-Jul-2009 17:27:04 GMT; path=/; domain=.brawlsnapshots.com; HttpOnly, phpbb3_q3k1i_sid=3c2ab8dae46098004b66dcd2ff6c3180; expires=Thu, 23-Jul-2009 17:27:04 GMT; path=/; domain=.brawlsnapshots.com; HttpOnly, phpbb3_q3k1i_u=1000; expires=Thu, 23-Jul-2009 17:27:04 GMT; path=/; domain=.brawlsnapshots.com; HttpOnly, phpbb3_q3k1i_k=c06c23e2a199173a; expires=Thu, 23-Jul-2009 17:27:04 GMT; path=/; domain=.brawlsnapshots.com; HttpOnly, phpbb3_q3k1i_sid=85d32e487ffd5bc8fad948e327866597; expires=Thu, 23-Jul-2009 17:27:04 GMT; path=/; domain=.brawlsnapshots.com; HttpOnly" | |
puts "The Cookies:" | |
puts asetcookie | |
puts "Ruby says:" | |
puts CGI::Cookie::parse(asetcookie).inspect | |
CGI.module_eval { remove_const "Cookie" } | |
# TODO: document how this differs from stdlib CGI::Cookie | |
class CGI #:nodoc: | |
class Cookie < DelegateClass(Array) | |
attr_accessor :name, :value, :path, :domain, :expires | |
attr_reader :secure, :http_only | |
# 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. | |
# http_only:: whether this cookie can be accessed by client side scripts (e.g. document.cookie) or only over HTTP | |
# More details: http://msdn2.microsoft.com/en-us/library/system.web.httpcookie.httponly.aspx | |
# Defaults to false. | |
# These keywords correspond to attributes of the cookie object. | |
def initialize(name = '', *value) | |
if name.kind_of?(String) | |
@name = name | |
@value = Array(value) | |
@domain = nil | |
@expires = nil | |
@secure = false | |
@http_only = false | |
@path = nil | |
else | |
@name = name['name'] | |
@value = Array(name['value']) | |
@domain = name['domain'] | |
@expires = name['expires'] | |
@secure = name['secure'] || false | |
@http_only = name['http_only'] || false | |
@path = name['path'] | |
end | |
raise ArgumentError, "`name' required" unless @name | |
# simple support for IE | |
unless @path | |
%r|^(.*/)|.match(ENV['SCRIPT_NAME']) | |
@path = ($1 or '') | |
end | |
super(@value) | |
end | |
# Set whether the Cookie is a secure cookie or not. | |
def secure=(val) | |
@secure = val == true | |
end | |
# Set whether the Cookie is an HTTP only cookie or not. | |
def http_only=(val) | |
@http_only = val == true | |
end | |
# Convert the Cookie to its string representation. | |
def to_s | |
buf = '' | |
buf << @name << '=' | |
buf << (@value.kind_of?(String) ? CGI::escape(@value) : @value.collect{|v| CGI::escape(v) }.join("&")) | |
buf << '; domain=' << @domain if @domain | |
buf << '; path=' << @path if @path | |
buf << '; expires=' << CGI::rfc1123_date(@expires) if @expires | |
buf << '; secure' if @secure | |
buf << '; HttpOnly' if @http_only | |
buf | |
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, ... } | |
# | |
def self.parse(raw_cookie) | |
cookies = Hash.new([]) | |
if 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.split('&').collect!{|v| CGI::unescape(v) } | |
unless cookies.has_key?(name) | |
cookies[name] = new(name, *values) | |
end | |
end | |
end | |
cookies | |
end | |
end # class Cookie | |
end | |
puts "Rails says:" | |
puts CGI::Cookie::parse(asetcookie).inspect |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment