我在每个页面上都有一个登录表单。如果由于 cookie 被禁用而导致登录失败,我想向用户显示一条消息,要求他们启用 cookie。我创建了这个中间件:
class CheckCookiesEnabled(object):
def process_request(self, request):
if request.user.is_anonymous():
request.session.set_test_cookie()
return
在我的登录视图中,我只检查request.session.test_cookie_worked()
并登录,否则我想显示该消息。
if request.session.test_cookie_worked():
request.session.delete_test_cookie()
# Log in
else:
return HttpResponse(json.dumps({'errors': "Login failed (enable cookies to login)"}), mimetype = 'application/json')
问题是,request.session.test_cookie_worked()
似乎总是正确的;即使在浏览器中禁用了 cookie,Django 似乎也能够设置测试 cookie。任何想法为什么以及如何解决这个问题?或者有没有更好的方法来检查浏览器是否启用了 cookie?
顺便说一句:如果我set_test_cookie()
在每个请求中,Django 总是设置一个新的 cookie 还是只有在没有的情况下?