Django与twill - 会话cookie未设置

3 投票
1 回答
1066 浏览
提问于 2025-04-16 13:30

我正在用 twilldjango-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 个回答

0

正如F.C.所说,如果客户端和服务器是不同的机器,并且它们的时间不一致(或者可能在不同的时区),你可能会遇到cookie过期的问题。

我刚刚仔细检查了set_test_cookie()的代码,看起来它设置值的方式是很正常的。你确定你遇到问题的页面没有返回错误(因此没有设置test_cookie)吗?这可能有很多原因,但我能想到的有:

  • Twill可能没有发送你的应用需要的Host头信息
  • Twill可能没有发送你的应用需要的referer头信息
  • Twill可能不支持压缩/加密/分块/其他某些功能
  • Twill可能在某些方面没有完美模拟浏览器
  • 你的其他中间件可能需要上述某种组合

再仔细检查一下你的其他中间件。试着创建一个只测试这个问题的空项目。一个只启用管理员功能的空项目应该就足够了。如果你能在一个最简配置中重现这个问题,我们就能更好地帮助你找到bug。

撰写回答