Cors 没有物理保存 cookie
Posted
技术标签:
【中文标题】Cors 没有物理保存 cookie【英文标题】:Cors not physically saving cookie 【发布时间】:2017-08-29 18:48:46 【问题描述】:经过数小时的挖掘和测试,我让本地前端 (angular2) 与开发后端对话。
在 https 请求和 htaccess 上使用 withCredentials: true
:
Header add Access-Control-Allow-Origin "https://127.0.0.1:3000"
Header add Access-Control-Allow-Credentials "true"
Header add Access-Control-Allow-Methods "GET, POST"
在我重新加载页面之前一切都很好 - 我必须再次登录。 这是随请求一起发送的,但 cookie phpSESSID 实际上并未保存在磁盘上:
Cookie:PHPSESSID=jp65lr9tviq6n5q9s1i0fupuq7
如果我构建代码并上传到后端所在的同一台服务器,而不是使用 CORS - 一切正常,但是当我在本地开发前端时,我不能这样做。
响应标头:
Access-Control-Allow-Credentials:true
Access-Control-Allow-Methods:GET, POST
Access-Control-Allow-Origin:https://127.0.0.1:3000
Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection:Keep-Alive
Content-Encoding:gzip
Content-Length:105
Content-Type:text/html
Date:Tue, 04 Apr 2017 14:15:56 GMT
Expires:Thu, 19 Nov 1981 08:52:00 GMT
Keep-Alive:timeout=5, max=100
Pragma:no-cache
Server:Apache/2.4.7 (Ubuntu)
Vary:Accept-Encoding
X-Powered-By:PHP/5.5.9-1ubuntu4.20
请求标头:
Accept:application/json, text/plain, */*
Accept-Encoding:gzip, deflate, br
Accept-Language:en-GB,en;q=0.8
Connection:keep-alive
Content-Length:62
Content-Type:application/x-www-form-urlencoded
Cookie:PHPSESSID=cjoe07094u4139i7c0pb4cd3e7
Host:dev.server.com
Origin:https://127.0.0.1:3000
Referer:https://127.0.0.1:3000/login
User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
我在这里错过了什么?
更新: 似乎它确实保存了它-在错误的域下。 cookie设置在api服务器域下,localhost找不到了。
【问题讨论】:
【参考方案1】:在 webpack 设置中设置代理:
proxy:
'/authenticate':
target: 'https://dev.server.com',
secure: false,
changeOrigin: true
,
'/Api':
target: 'https://dev.server.com',
secure: false,
changeOrigin: true
与 withCredentials: true 一起解决了这个问题。
【讨论】:
以上是关于Cors 没有物理保存 cookie的主要内容,如果未能解决你的问题,请参考以下文章
Angular 2 不会使用 CORS 保存我的身份验证 Cookie
保存Ajax但不将CORS cookie从127.0.0.1发送到服务