2017-04-05 76 views
0

浏览器正在忽略响应cookie(csrftoken + seesionid)。 document.cookie()返回空字符串和铬显影工具显示this site has no cookies即使当我收到set-cookie响应标头时cookie也不会被写入

如何解决这个问题?

FRONT:角2(本地主机:4200)

回到: Django的/ DRF(本地主机:8000)

登录路线: [交] /登录

响应标题:

Access-Control-Allow-Credentials:true 
Access-Control-Allow-Origin:http://localhost:4200 
Allow:POST, OPTIONS 
Date:Wed, 05 Apr 2017 07:38:24 GMT 
Server:WSGIServer/0.2 CPython/3.5.2 
Set-Cookie:sessionid=d5v1mri12bniyvyqqt55ar8mfl9mr2jk; expires=Wed, 19-Apr-2017 07:38:24 GMT; HttpOnly; Max-Age=1209600; Path=/ 
Set-Cookie:csrftoken=5PcTF8aQ1O79gdrylZcGchnmKyRy6zwS3kL2jR5dY2CMdjPfEYyhkoJjOzsDZuvj; expires=Wed, 04-Apr-2018 07:38:24 GMT; Max-Age=31449600; Path=/ 
Vary:Accept, Cookie, Origin 
X-Frame-Options:SAMEORIGIN 

请求头:

Accept:application/json, text/plain, */* 
Accept-Encoding:gzip, deflate, br 
Accept-Language:en-US,en;q=0.8,fr;q=0.6 
Connection:keep-alive 
Content-Length:51 
content-type:application/json 
Cookie:sessionid=d5v1mri12bniyvyqqt55ar8mfl9mr2jk; csrftoken=sml3uocRIeiB3KfHSnNkJXBJn3QAFN3p7lLtdvhrALgUwoVnfNjGM5PIy2L3UHls 
Host:127.0.0.1:8000 
Origin:http://localhost:4200 
Referer:http://localhost:4200/ 
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/56.0.2924.76 Chrome/56.0.2924.76 Safari/537.36 

回答

1

Cookies没有主机(你的情况是localhost)的不同端口之间共享。浏览器向您显示来自localhost:4200的内容,但Cookie设置为localhost:8000。它们被正确设置和使用,正如您在第二个列表中标题为“请求标题”所示。因此,要在浏览器中查看它们,您必须从localhost:8000打开一个URL。即使这样,sessionid也不会在document.cookie()中列出,因为它被标记为“HttpOnly”(这意味着JavaScript不可用)。

+0

确定为seesionid,约csrftoken我需要访问它(来源:4200)有什么用javascript将其包含在下一个请求标题中,这可能吗? –

+0

Cookie自动包含在请求中,因此您不需要在脚本中访问它们。查看您的请求日志 - 此处包含csrftoken cookie。 –

+0

我需要这样做来添加CSRF令牌作为请求头(而不是cookie),这是csrf prevension的工作原理。标题键被称为“X-CSRFToken”,在我的情况下是空的,导致django回答403“缺少csrf标记或不正确” –

0

如果您使用角度cli,您可以设置代理。 proxy.conf.json的

ng serve --proxy-config proxy.conf.json

样品 { "/api": { "target": "http://localhost:3000", "secure": false } }

或局部开发利用的 https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi

+0

生产服务器呢? –

+0

如果您将主机放在与CORS相同的域上,则不会出现问题。如果你使用不同的领域,科斯将工作。这是一个铬功能/错误,不允许本地主机端口上的CORS –

+0

扩展名显示错误不允许通配符“*”....,这是铬特定问题吗?这与Firefox的一样吗?怎么样角1我有一个Angular 1项目,它没有所有这个很好用 –

相关问题