关于跨域无法保存cookie问题

本文介绍了前后端分离项目中解决跨域问题的方法,并详细解释了如何配置才能使跨域情况下的Cookie正常保存及读取。

最近被跨域问题搞得头疼了很久,今天终于搞明白了,记录下来以备今后查看。

对于前后端分离项目,基本上都会遇到跨域问题,所谓的跨域问题就是指前端和后端部署的站点不一致,如果不做配置前端发起请求就会被浏览器阻断禁止访问。需要前端和后端都做相应配置才可以正常通信。关于配置网上很多,以前端通过axios通信为例,增加axios.defaults.withCredentials = true这么一条就行了,后端以laravel配置为例:

public function handle($request, Closure $next)

{

$response = $next($request);

$response->header('Access-Control-Allow-Origin', '$request->header("Origin")');   //这里前端配置withCredentials = true就不能用“ * ”号

$response->header('Access-Control-Allow-Headers', 'Origin, Content-Type, Cookie, Accept');  

$response->header('Access-Control-Allow-Methods', 'GET, POST, PATCH, PUT, OPTIONS'); 

$response->header('Access-Control-Allow-Credentials', 'true');   //和前端对应后端也得将Credentials设置为true

return $response;

}

就是在响应头里提前加这么一些配置,如果你启用了Fruitcake\Cors中间件,只需要配置相应的cors.php配置文件就行,和上面效果一样。

但是光做这些设置还是解决不了跨域cookie保存问题,也就是说:前端在申请访问时,后端可以正常返回信息,并且也可以携带cookie你通过浏览器查看网络文件头也有set-cookie字段,但是在浏览器本地存储是不记录cookie的,即set-cookie失效,后端过来的cookie值不能写入前端,自然前端也无法读取后端响应的cookie内容。网上有说需要更改session设置,将session.php配置文件中的session_domain域设置为前端所在的域就行了,也有说设置为前端的ip地址就行,方法都试过了,依旧不能保存cookie。

后来查了很多资料,发现前后端完全不同域下进行cookie共享行不通,至少我是没能解决,但是在一级域名一致,二级域名不同的情况下,是可以支持cookie保存的,于是我做了如下配置:

后端服务端在ubuntu上配置/etc/hosts文件,增加 

          后端服务器ip   aa.xx.com

          前端服务器ip    bb.xx.com

前端服务器在windows+nodejs上,配置才c:/windows/system32/drivers/etc/hosts ,增加同上内容

然后修改session的配置文件,将session_domain 配置为.xx.com(这里注意xx前有一个点)一级域

配置完后,终于解决了前后端分离情况下跨域通信可将cookie正常保存到本地问题。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值