可以在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