iOS 10.3中的ajax响应中缺少Set-Cookie标头

时间:2017-03-31 00:25:40

标签: ios ajax django cordova cookies

我的phonegap应用与django通信,因此我使用以下文章中描述的方法捕获并发送csrftoken:

https://docs.djangoproject.com/en/1.10/ref/csrf/

这一直在iOS 10.3中运行。 在iOS 10.3中,ajax调用获取除Set-Cookie之外的所有响应头。 我尝试添加xhrFields:{withCredentials:true}和crossDomain:true但它没有区别。

以下是获取csrftoken的请求:

 $.ajax({beforeSend: function(xhr) {xhr.withCredentials = true;},
    type: "GET",
    url: 'url', // the django view has @ensure_csrf_cookie set     
    xhrFields: {withCredentials: true},
    crossDomain: true,
    success: function(data, textStatus, xhr) {
      // returns null in iOS 10.3
      document.cookie = xhr.getResponseHeader("Set-Cookie"); 
    },
});  

相同的代码在iOS 10.2中运行良好,我们可以从“Set-Cookie”标题中保存csrftoken供以后使用。
iOS 10.3以某种方式防止这个“Set-Cookie”响应头出现在xhr对象中,因此我们无法从服务器获取csrftoken,并且任何后续的POST操作都将被禁止。

1 个答案:

答案 0 :(得分:0)

感谢Selim Arsever的建议,我可以使用第三方Cordova插件来解决这个问题。

步骤:

让django生成一个csrftoken并通过JsonResponse将数据发送到我的应用程序;

使用cookieMaster的setCookieValue将csrftoken设置为域cookie。

然后可以检索csrftoken以在后续的POST调用中发送到django。