可以在ajax请求的响应中获取django设置的cookies

Posted

技术标签:

【中文标题】可以在ajax请求的响应中获取django设置的cookies【英文标题】:can get the cookies set by django in the response of ajax request 【发布时间】:2018-12-21 05:20:02 【问题描述】:

cors-headers 在我的 django 服务器上启用 cors。我的setting.py是这样的。

CORS_ORIGIN_ALLOW_ALL= True
CORS_ALLOW_CREDENTIALS = True

我也将corsheaders 添加到INSTALLED_APPS,我的MIDDLEWARE 是这样的

MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'corsheaders.middleware.CorsMiddleware',

]。 我设置了一个非常简单的视图,看起来像这样。

    def get(self, request):

    response = HttpResponse("hi")
    response['Set-Cookie'] = ('food=bread; Path=/; max_age=10000')
    print(response._headers)
    return response

在控制台上的标题是这样的。

'set-cookie': ('Set-Cookie', 'food=bread; drink=water; Path=/; max_age=10000'), 'content-type': ('Content-Type', 'text/html; charset=utf-8')

当我在浏览器中调用我的 api 时,cookie 已设置并且一切正常,但是当我在响应正文中使用 axios for ajax 时,没有什么与我的 cookie 相似。 我的 javasctipt 代码我喜欢这个。

 axios.get('http://37.130.202.188:13434/users/test/',
  withCredentials: true,

 )
  .then(function (response) 
    console.log(response);
  );

我用这个命令运行我的服务器

python manage.py runserver

非常感谢您对这个头痛的每一个反应。

【问题讨论】:

不确定这是否能解决您的问题,但您应该考虑使用Response.set_cookie() 而不是自己生成 cookie 标头。 @solarissmoke 我已经测试过这种方式,但它不起作用。 @solarissmoke 当我通过浏览器点击 url 时一切都很好,但我没有在 ajax 请求中设置 cookie。 【参考方案1】:

我找到了答案。与this question 完全一样,在 http 响应的标头中设置的 cookie 在 javascript 中无法访问,它们会自动保存在浏览器中。

【讨论】:

以上是关于可以在ajax请求的响应中获取django设置的cookies的主要内容,如果未能解决你的问题,请参考以下文章

如何清除以前的 AJAX 响应数据(不是 html/表单数据)? - Django/AJAX

在django中解决跨域AJAX

django ajax请求响应[重复]

ajax响应时长怎样设置?

Django 1.9 AJAX 表单 CSRF 令牌 403 错误 - “未设置 CSRF cookie”

Django 在 JQuery AJAX 请求中说 is_ajax 是错误的