记一次后台注入cookie

1,302 阅读2分钟

快两个月没有日记了,过了将近一个月猪一样的生活,天天吃了睡睡了吃,也都不学习。这两星期在家办公,在调试后台注入cookie遇见了一些问题,记录一下。

跨域这件事,就不谈了,说一些小细节。当前端请求不携带cookie的时候,服务端设置: 'Access-Control-Allow-Origin': '*' 这时候不会报跨域的错误。

当前端设置了允许携带cookie: 设置withCredentials为true,报错:

表示不能够是通配符*号。

Access-Control-Allow-Origin要配置完整的地址,http要,端口也要,而且后台也必须允许携带cookie,Access-Control-Allow-Credentials要配置true。

这时候问题就来了,刚开始我写的node接口和后台自己写的接口自己测试都能注入cookie,我请求后台接口就注入不了,原因是各自测试的时候,都是本机的ip,很容易直接就注入了cookie。IP相同的情况下,开启了允许携带cookie,注入很简单。

因为是前后端分离,部署上去是没什么问题,开发的时候ip都是本机的,就出现死活注入不了cookie。配置了domain也都无法注入。

后来了解到,不同IP是无法由后台直接注入cookie,而且不同域名之间也是无法注入cookie的。好比百度无法给京东注入cookie。也都知道同一个域名下的子域名和这个域名cookie是共享的。比如: c.xx.com和b.xx.com之间的cookie是共享的。

于是我本地host配置了两个IP: 我本地项目启动用31.xx.com作为域名,31是我的本机IP,多个开发人员都可以自己设置一个,只要xx.com相同就好。

接口设置一个域名,比如请求的接口地址是http://192.168.164.25,那么就设置192.168.164.25 b.xx.com,然后直接请求地址: http:// b.xx.com:8080/test/getInfo 最后让后台domain设置为.xx.com,这样开发的时候也都能注入cookie。要注意的是,path最好设置一下/,前端setcookie也一样,否则默认注入的path是当前页面,另外的页面就获取不到cookie了。

罗里吧嗦了一堆,其实重点就两个,想要由服务端注入cookie,前台后台都需要开启允许携带cookie设置withCredentials,开启之后允许跨域的头要是完整地址,不同IP域名之间无法注入cookie,发布线上可以发布在域名相同或者子域名相同的服务,本地开发通过配置host域名指向来进行开发。

当初调试了蛮长时间,有很多不同的报错,今天想重现是不可能了,只是记录我解决的办法,不敢保证都是这种情况。