我无法在safari隐私浏览中将数据发布到我的django webapp(它适用于Chrome隐身版)。
我没有使用localstorage。
我使用
设置X-CSRFToken标头var csrftoken = NMA.getCookie('csrftoken');
$.ajax({
type:"POST",
contentType: 'application/json; charset=utf-8',
beforeSend: function (request, settings) {
if (!csrfSafeMethod(settings.type) && !this.crossDomain){
request.setRequestHeader("X-CSRFToken", csrftoken);
}
},
url: "/profiler/logAnswers/
data: payload,
dataType: 'json'
}).done(...
使用{%csrf_token%}设置csrftoken cookie,隐藏输入存在于<form>
我使用charles检查了请求,并设置了csrftoken cookie并设置了X-CSRFToken标头。
我注意到隐私浏览中的safari增加了&#34; DNT = 1&#34; (不跟踪)标题,不确定这是否导致问题。 Chrome隐身请求中不存在DNT = 1。
我已在
中记录了Cookie使用python2.7 / site-packages / django / middleware / csrf.py
logger.debug(request.COOKIES)
并且缺少csrftoken cookie(缺少其他几个cookie)。只打印了4个饼干。如查尔斯所见,初始请求中有13个cookie。
由于没有csrftoken,这会导致
禁止访问(未设置CSRF cookie。)403错误。
标题中的DNT = 1是什么?它是否限制了允许的cookie数量?它会阻止某些类型的cookie吗?
答案 0 :(得分:0)
问题是(为了绕过localstorage不可用)我将json对象保存在cookie中。有一个python错误或问题:
如果字符串中有任何引号,则只会导致部分cookie被解码。
所以解决方法是替换所有cookie中的引号