Django,客户端发送的cookie在服务器中丢失了

时间:2016-06-30 01:13:01

标签: django session

当我们从客户端(android离子库)发送ajax请求时设置“Cookie”标头

大多数情况下,django会使用request.COOKIES获取Cookie 但有时,在sessionid

中找不到已发送的Cookie(Cookie中request.COOKIES

可能的原因是什么?

我无法找到在Django代码库中设置request.COOKIES的地方......

1 个答案:

答案 0 :(得分:0)

如@solarissmoke的评论所述,这是在wsgi处理程序中完成的,通过解析Cookies标头(来自属性environ['HTTP_COOKIES'])。

常见的罪魁祸首可能是任何可以在途中修改请求的应用程序,从您的http /代理服务器到django中间件到您自己的视图代码。

在客户端设置cookie时的另一个常见失败点是标准cookie是特定于域的,并且浏览器具有允许/阻止在当前服务器域之外设置cookie的设置(例如,来自Response对象);甚至不允许任何饼干。以下是关于如何在任何平台上管理(和阻止)cookie的the Google Chrome documentation

要进行调试,我建议您在应用的不同阶段记录(例如打印出)request.META(应包含HTTP_COOKIES environ键)。您可以有条件地记录整个请求,如下所示:

import logging

logger = logging.getLogger('my_app')


def my_view(request):
    if not request.COOKIES:
        logger.error('Cookies empty! HttpRequest.META is: %s', dict(request.META))

如果会话cookie对您的应用程序至关重要,您当然应该处理客户端不允许存储cookie的情况,可能会显示错误页面。