我有一个 Rails 应用程序,它必须与一个非常旧的遗留应用程序共存。旧版应用程序会查找具有包含特定字符串的值的 cookie。不幸的是,遗留 cookie 中的字符通常包含斜杠。我遇到的问题是,当 Rails 应用程序写入 cookie 时,它首先会进行 URL 编码,这会导致遗留应用程序中断,因为 cookie 值不正确。
cookie_performance_fix.rb
我通过编辑文件(路径./actionpack-1.13.5/lib/action_controller/cgi_ext/cookie_performance_fix.rb
:)在 Rails 1.13.5 中进行了此操作
,为了使其正常工作,我更改了代码,如下所示:
def to_s
buf = ""
buf << @name << '='
if @value.kind_of?(String)
rails code.
#buf << CGI::escape(@value)
buf << @value
else
#buf << @value.collect{|v| CGI::escape(v) }.join("&")
buf << @value.collect{|v| (v) }.join("&")
end
在我决定将 Rails 升级到 2.3.2 版本之前,这实际上运行良好。
在 Rails 2.3.2 中,该cookie_performance_fix.rb
文件不再存在。我查看了同一个目录并找到了一个名为的文件cookie.rb
,我尝试以类似的方式对其进行修改。
def to_s
buf = ''
buf << @name << '='
#buf << (@value.kind_of?(String) ? CGI::escape(@value) : @value.collect{|v| CGI::escape(v) }.join("&"))
buf << (@value.kind_of?(String) ? @value : @value.collect{|v| (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
不幸的是,这似乎不起作用。在新的 Rails 2.3.2 中,cookie 不断得到 URL 编码。我知道关闭 URL 编码并不是最好的主意,但在遗留应用程序退役之前我没有太多选择。不幸的是,我无法访问旧代码来添加对 cookie 的 URL 解编码的支持,因此我必须确保使用正确的序列(包括斜杠)编写旧 cookie。如果有人能告诉我如何在 Rails 2.3.2 中关闭 URL 编码,将不胜感激。
谢谢。