检查是否在每个页面上启用了cookie登录

时间:2013-02-16 13:19:45

标签: django login session-cookies

我在每个页面都有一个登录表单。如果由于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或仅在没有cookie的情况下?

2 个答案:

答案 0 :(得分:3)

您应该在set_test_cookie中间件中使用process_response,而不是process_requesttest_cookie_worked始终是真的,因为您总是通过使用" Cookie"填充request.session来自行添加它。在process_request - 它在控件进入视图之前执行。

答案 1 :(得分:0)

使用JavaScript结束:

function cookies_enabled() {
    if (navigator.cookieEnabled) {
        return true;
    } else if (navigator.cookieEnabled === undefined) {
        document.cookie = "testcookie";
        if (cookie_present("testcookie"))
            return true;
    }
    return false;
}

工作得很好。不管怎样,谢谢。