Ruby CGI :: Cookie原始cookie解析

Ruby CGI :: Cookie原始cookie解析,第1张

概述我希望能够在 ruby 1.9.3p194(2012-04-20修订版35410)[x86_64-darwin10.8.0]中解析原始cookie字符串. CGI::Cookie库看起来很有希望,然而,它并不像我想象的那样有效. 例如, CGI::Cookie::parse("ASPSESSIONIDSCDRSRTS=HHALOHOBJGJMLPIANNLDOMCJ; path=/").each_ 我希望能够在 ruby 1.9.3p194(2012-04-20修订版35410)[x86_64-darwin10.8.0]中解析原始cookie字符串.

CGI::Cookie库看起来很有希望,然而,它并不像我想象的那样有效.

例如,

CGI::cookie::parse("ASPSESSIONIDSCDRSRTS=HHALOHOBJGJMLPIANNLDOMCJ; path=/").each_key {|name| p 'cookie name: ' + name}

将返回:

"cookie name: ASPSESSIONIDSCDRSRTS""cookie name: path"

我想要的是类似CGI :: new实例的工作,除了你传递一个原始cookie字符串:

cookie1 = CGI::cookie::new('name'    => 'name','value'   => ['value1','value2',...],'path'    => 'path',# optional                       'domain'  => 'domain',# optional                       'expires' => Time.Now,# optional                       'secure'  => true      # optional                      )name    = cookie1.namevalues  = cookie1.valuepath    = cookie1.pathdomain  = cookie1.domainexpires = cookie1.expiressecure  = cookie1.secure

我无法弄清楚的是如何从原始cookie字符串中雄辩地做到这一点.

编辑—

以下代码位于〜/ .rvm / src / ruby​​-1.9.3-p194 / lib / cgi / cookie.rb文件中.所以它应该返回如下面的注释:cookies [name] = cookie :: new(name,* values).我似乎没有得到.

# 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 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,@@accept_charset) }    if cookies.has_key?(name)      values = cookies[name].value + values    end    cookies[name] = cookie::new(name,*values)  end  cookiesend

编辑—

这似乎是Ruby的CGI :: cookie.parse方法中的一个错误.我已经打开了关于Ruby BUG跟踪器的错误报告 – https://bugs.ruby-lang.org/issues/7364

解决方法 我只是遇到了同样的问题. CGI :: cookie.new不能消耗CGI :: cookie :: parse产生的东西,它们似乎没有像我们预期的那样相互补充.

快速搜索宝石我找到了https://github.com/dwaite/cookiejar.看起来这个宝石尝试做了很多,但至少它有代码来正确解析原始cookie,正如我们所期望的那样.我没有尝试理解这个库,因为它似乎做了很多东西,我实际上只关心“消费cookie – > modiyfing it – >生成cookie”.

我想出了这个快速的黑客:

require 'cgi'require 'cookiejar'# Some sampleraw_cookie = "somecookie=some%7Cvalue; expires=Wed,02 Apr 2014 13:36:50 GMT; path=/; domain=.somedomain.com"parts = cookieJar::cookieValIDation.parse_set_cookie raw_cookie# Needs manual unescapeparts[:value] = CGI::unescape(parts[:value])# Per spec,this name is differentparts[:expires] = parts[:expires_at]# Remove old onesparts.delete :expires_at# cookieJar adds them always,removeparts.delete :version# Convert symbol keys to strings for GGI::cookiecookie = parts.inject(Hash.new) do |acc,(k,v)|  acc[k.to_s] = v   acc endputs CGI::cookie.new(cookie).to_s#=> somecookie=some%7Cvalue; domain=.somedomain.com; path=/; expires=Wed,02 Apr 2014 13:36:50 GMT

我想这应该是一个gem的调用,它只对cookie做一件事并做得很好:能够解析并生成原始cookie字符串.但TBH,问题领域可能要比我做的方式更加复杂.

总结

以上是内存溢出为你收集整理的Ruby CGI :: Cookie原始cookie解析全部内容,希望文章能够帮你解决Ruby CGI :: Cookie原始cookie解析所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1275161.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存