Я использую Pylons и у меня проблемы с response.set_cookie - PullRequest
2 голосов
/ 04 июня 2011

Я думаю, что одна из версий Pylons отличается, но я не мог найти простой способ узнать, какие версии я использовал.В первом примере я уверен, что это 0.9.7 и выше, используя webob для установки cookie.Эта среда устанавливает символ @ на \ 100.Как вы можете видеть в другой среде, выполнение точно такой же вещи устанавливает значение правильно.Любая помощь будет признательна, если вам понадобится дополнительная информация, дайте мне знать.

Более новая версия Pylons (я думаю), устанавливающая значение неправильно

response.set_cookie('email', 'user@domain.com', max_age=3600)
response.headers
ResponseHeaders([('Content-Type', 'text/html; charset=utf-8'), ('Content-Length','0'),
 ('Pragma', 'no-cache'), ('Cache-Control', 'no-cache'), ('Set-Cookie',
'email="user\\100domain.com"; expires="Fri, 03-Jun-2011 21:07:07 GMT"; Max-Age=3600; Path=/')])

Тестовая среда работает как обычно / ожидается

response.set_cookie('email', 'user@domain.com', max_age=3600)
response.headers
HeaderDict([('Content-Type', 'text/html; charset=utf-8'), ('Content-Length', '0'),
('Pragma', 'no-cache'), ('Cache-Control', 'no-cache'), ('Set-Cookie', 
'email=user@domain.com; expires="Fri, 03-Jun-2011 21:07:35 GMT"; Max-Age=3600; Path=/')])

1 Ответ

1 голос
/ 05 июня 2011

Это из-за более новой версии webob.

Пакет webob в пилонах 0.9.7 имеет размер ~ 0.9.8, который не экранирует значения cookie.

Где-то между этим и сейчас webob начал экранировать значения, что вызывает ваш 'новая версия потерпит неудачу.Если вы покопаетесь в базе кодов webob (более новая версия), это происходит в методе cookie класса serialize (), где он обеспечивает правильное экранирование значений.Старая версия устанавливала эти значения напрямую и не сериализировалась.

У меня есть аналогичная установка с 0.9.7, работающим в virtualenv, поэтому я смог воспроизвести это поведение в моей системе.

Поскольку вы используете методы из одной и той же версии, они также должны экранировать значения в запросе, поэтому все должно быть в порядке.

...