Django与twill - 会话cookie未设置
我正在用 twill 和 django-test-utils 测试一个 Django 应用,但它没有让我登录。
我觉得它没有设置 Django 的会话 cookie。我在 twill 中访问一个网页,这个网页调用了 request.session.set_test_cookie()
,然后在这个调用返回后,twill.show_cookies()
(应该能打印出 cookies)却什么都没有显示。再在另一个页面/视图中,request.session.test_cookie_worked()
返回了 False
。
奇怪的是,在另一个页面中,调用了 request.set_cookie(...)
手动设置了一个 cookie,这个是有效的。twill.show_cookies()
显示了那个 cookie。所以有些 cookies 是有效的,但会话中间件似乎就是不工作……
这可能是什么情况呢?我该怎么才能在 twill 中设置 Django 的会话 cookie?
还有其他人遇到过类似的问题,例如在 django-users 上的讨论,关于另一个 twill/django 脚本的 cookie 评论
1 个回答
正如F.C.所说,如果客户端和服务器是不同的机器,并且它们的时间不一致(或者可能在不同的时区),你可能会遇到cookie过期的问题。
我刚刚仔细检查了set_test_cookie()的代码,看起来它设置值的方式是很正常的。你确定你遇到问题的页面没有返回错误(因此没有设置test_cookie
)吗?这可能有很多原因,但我能想到的有:
- Twill可能没有发送你的应用需要的
Host
头信息 - Twill可能没有发送你的应用需要的
referer
头信息 - Twill可能不支持压缩/加密/分块/其他某些功能
- Twill可能在某些方面没有完美模拟浏览器
- 你的其他中间件可能需要上述某种组合
再仔细检查一下你的其他中间件。试着创建一个只测试这个问题的空项目。一个只启用管理员功能的空项目应该就足够了。如果你能在一个最简配置中重现这个问题,我们就能更好地帮助你找到bug。