@csrf_exempt仍然有Set-Cookie:csrftoken

时间:2015-06-13 09:08:00

标签: django cookies

使用Django 1.8时,我不想在用户未登录时在我网站的主页上设置cookie。所以我用@csrf_exempt装饰我的视图

from django.views.decorators.csrf import csrf_exempt

@csrf_exempt 
def mainhome(request):

当我查看查询时,我可以看到cookie仍然设置,为什么?

rodo@roz-desktop:~/(master)$ curl  -I http://127.0.0.1:8000/
HTTP/1.0 200 OK
Date: Sat, 13 Jun 2015 08:59:27 GMT
Server: WSGIServer/0.1 Python/2.7.8
Content-Type: text/html; charset=utf-8
Vary: Cookie
X-QueryInspect-Duplicate-SQL-Queries: 2
X-QueryInspect-Total-SQL-Time: 34 ms
X-QueryInspect-Total-Request-Time: 283 ms
X-QueryInspect-Num-SQL-Queries: 3
Set-Cookie:  csrftoken=sa5x0DyxgBamca0D84ZZnzl2WAL0evkv; expires=Sat, 11-Jun-2016 08:59:27 GMT; Max-Age=31449600; Path=/

2 个答案:

答案 0 :(得分:2)

正如@Daniel Roseman指出的那样,@csrf_exempt对你没有帮助。

负责会话cookie的中间件是SessionMiddleware。您可以在Django Docs: How to use sessions中详细了解相关信息。不幸的是,没有类似的装饰器可以免除某些特定的观点。

因此,为了自定义中间件的行为,您需要继承SessionMiddleware。 SO上有一个nice answer的问题。

答案 1 :(得分:0)

csrf_exempt控制是否在POST上强制执行CSRF。它与CSRF cookie是否设置无关;这是由CsrfViewMiddleware为所有响应完成的。