2017-08-08 214 views
2

我的問題是:瀏覽器不保存來自Set-Cookie標頭的cookie。
我有我的桌面上本地部署的前端(Angular2)。後臺在臨時服務器上,所以交互在CORS上。

什麼我得到的請求與Set-Cookie頭:瀏覽器不保存cookies

HTTP/1.1 200 OK 
Date: Tue, 08 Aug 2017 11:00:03 GMT 
Server: ..... 
Access-Control-Allow-Origin: http://localhost:4200 
Access-Control-Allow-Credentials: true 
Content-Type: application/json 
Content-Length: 39 
Set-Cookie: session=.........; Path=/ 
Keep-Alive: timeout=5, max=99 
Connection: Keep-Alive 

我要送我得到上面的答案後,以下請求:

GET /api/..... HTTP/1.1 
Host: ...{some url}... 
Connection: keep-alive 
Origin: http://localhost:4200 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 
Content-Type: application/json 
Accept: application/json, text/plain, */* 
withCredentials: true 
Referer: http://localhost:4200/ 
Accept-Encoding: gzip, deflate 
Accept-Language: en-US,en;q=0.8,ru;q=0.6,uk;q=0.4 

正如你所看到的,那裏沒有餅乾。此外,我無法在外部應用程序(Chrome插件),JS控制檯和Application部分中的Web控制檯中看到它們。所以cookies絕對不會被瀏覽器保存。

我的問題是:問題在哪裏?這是我的標題/其他任何錯誤,或者它是與標題的後端問題?問題在哪裏?

關於複製答案 - 您可以看到,我嘗試了在其他主題中找到的答案,但它們並未解決我的問題。

回答

3

意外地找到了答案。那些會得到相同問題的人, 檢查您是否以正確的方式定義標題。
原因是withCredentials標題和他在Angular中的定義。要正確設置它,您應該按照以下方式進行:

let options = new RequestOptions(); 
options.withCredentials = true; 

一切都應該罰款與此語法。

0

可以直接放進http.method ...

this.http.get(url, { withCredentials: true });