Я использую пилоны и у меня проблемы с response.set_cookie

#python #cookies #pylons #webob

#python #файлы cookie #пилоны #webbob

Вопрос:

Я думаю, что одна из версий Pylons отличается, но я не смог найти простой способ определить, какие версии я запускал. В первом примере я совершенно уверен, что для установки cookie используется webob версии 0.9.7 и выше. В этой среде символ @ устанавливается равным 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:

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

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

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

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

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