小编bra*_*don的帖子

零散的403"CSRF FAILURECSRF cookie未设置"与django的错误

我们有一个刚刚开始暴露于外部世界的小网站.在大多数情况下,它工作得很好,但我们偶尔会从其中一个表单中收到403错误消息"CSRF FAILURECSRF cookie not set".表单肯定{% csrf_token %}包含,我们的中间件看起来像这样:

MIDDLEWARE_CLASSES = (
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
)
Run Code Online (Sandbox Code Playgroud)

该表单适用于大多数人,但大约每天一次我收到一封故障案例的电子邮件.电子邮件包含实际请求,看起来像这样(我删除了其余的POST数据以隐藏私人数据,但留下了csrfmiddlewaretoken):

<WSGIRequest
path:/main/10/apply/,
GET:<QueryDict: {}>,
POST:<QueryDict: {u'csrfmiddlewaretoken': [u'IQQZvbVIggJm6Be6VinPHj8Qn3i3TdmG']}>,
COOKIES:{},
META:{'CONTENT_LENGTH': '111978',
 'CONTENT_TYPE': 'multipart/form-data; boundary=----WebKitFormBoundaryLyo9BPXnAwKnt8ew',
 'CSRF_COOKIE': 'XmSPWJZk2UwS4PNBXRmVlAaYDDdNaGqk',
Run Code Online (Sandbox Code Playgroud)

CSRF_COOKIE与csrfmiddlewaretoken不匹配,这是我假设导致问题的原因,但我无法弄清楚这些是如何与某些提交不同步而不是其他提交.该页面是一个非常简单的表单,只有几个字段.

我应该看哪里的建议?我正在使用mod_wsgi通过apache在CentOS上运行最新的Django 1.4.1.

编辑:与成功的请求相比,唯一看起来奇怪的事情是这里的COOKIES:{}部分是空的,这会让我怀疑他们可能只是在他们的浏览器中禁用了cookie,但是为什么它会出现在CSRF_COOKIE中META部分?

谢谢你的帮助!

布兰登

django django-csrf http-status-code-403 django-1.4

5
推荐指数
1
解决办法
1833
查看次数