非常に古いレガシーアプリケーションと共存しなければならないRailsアプリケーションがあります。従来のアプリケーションでは、特定の文字列を含む値を持つCookieが検索されます。残念ながら、従来のCookieの文字にはスラッシュが含まれていることがよくあります。私が持っている問題は、Railsアプリケーションがクッキーを書き込むと、まずクッキーの値が間違っているため、レガシーアプリケーションが中断するURLエンコーディングが行われるということです。RailsでクッキーのURLエンコーディングを無効にする方法
は私は、このファイル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
これは残念ながらうまくいきません。 Cookieは新しいRails 2.3.2でURLエンコードされ続けます。私は、URLエンコーディングを無効にすることは最善の方法ではないことを知っていますが、レガシーアプリケーションが廃止されるまではあまり選択肢がありません。残念ながら、レガシーコードにアクセスしてURLのサポートを追加することはできません。つまり、クッキーを暗号化解除する必要があります。したがって、レガシーCookieがスラッシュを含む正しい順序で書き込まれていることを確認する必要があります。誰かがRails 2.3.2でURLエンコーディングを無効にする方法を教えてくれれば大いに感謝します。
ありがとうございます。
をラック方式を使用している...しかし、私は1つの質問があります。これでどのようにドメインを設定できますか? – Boomerange
@Boomerangeでは、ドメインでCookieを設定する方法を見つけることができますか? –
@AmitkumarJhaこんにちは、私はそれを行うにはjavascriptを使用するだけでした。しかしそれは問題ではありません。それは動作します: 'document.cookie ="#{@ cookieName} =#{@ cookieContent}; domain = domain.com " – Boomerange