我正在使用Pylons并遇到response.set_cookie问题

时间:2011-06-03 20:13:37

标签: python cookies pylons webob

我在想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 个答案:

答案 0 :(得分:1)

因为更新版的webob。

pylons 0.9.7中的webob包是~0.9.8,它不会转义cookie值。

从那时到现在,webob开始转义值,导致你的“新”版本失败。如果你深入研究webob代码库(更新的版本),这将发生在Cookie的serialize()方法中,它确保值被正确转义。旧版本直接设置这些值,并没有在序列化时转义。

我在virtualenv中运行0.9.7的类似设置,因此能够在我的系统上重现此行为。

就你使用相同版本的方法而言,它们也应该取消请求中的值,所以事情应该没问题。