2017-04-05 75 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項目,它沒有所有這個很好用 –

相關問題