У меня есть приложение Rails, которое должно сосуществовать с очень старым устаревшим приложением. Устаревшее приложение ищет файл cookie, значение которого содержит определенную строку символов. К сожалению, символы в устаревших файлах cookie часто содержат косую черту. У меня проблема в том, что когда приложение Rails записывает файл cookie, оно сначала выполняет кодирование URL, что приводит к поломке устаревшего приложения из-за неправильного значения cookie.
У меня это работало в Rails 1.13.5, редактируя файл cookie_performance_fix.rb
(Path: ./actionpack-1.13.5/lib/action_controller/cgi_ext/cookie_performance_fix.rb
)
Чтобы заставить это работать, я изменил код, как показано:
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 продолжает кодироваться в URL-адресе в новом Rails 2.3.2. Я знаю, что отключение URL-кодирования - не лучшая идея, но у меня нет особого выбора, пока устаревшее приложение не будет удалено. К сожалению, у меня нет доступа к устаревшему коду для добавления поддержки URL-декодирования файла cookie, поэтому я должен убедиться, что устаревший файл cookie записан с правильной последовательностью, включая косые черты. Если кто-нибудь может сказать мне, как отключить кодирование URL-адресов в Rails 2.3.2, я был бы очень признателен.
Спасибо.