一、场景再现
当前一个需求,前端不同的域名去请求同一个后端域名服务,导致cookie共用相互影响。
例子:
http://m.test1.com、http://m.test2.com、http://m.test3.com
用户访问以上3个链接时,后端请求访问的服务为同一个:http://meng.test.com
解决方案:
跨域过程中要尽量避免多对一的映射,采用一对一的方式。
将每一个前端域名都对应唯一一个后端服务域,分别映射:
http://meng.test1.com、http://meng.test2.com、http://meng.test3.com
后续:
再解决互斥cookie的问题之后,又出现了传多个同名cookie的情况,如图:
原因是由于之前 http://m.test2.com、http://m.test3.com 登录过的cookie仍旧存在本地,当用户再次请求原后端URL
http://meng.test.com 此时会把不同前端URL所保留的cookie 一并传给后端。
有一点需要注意,设置了widthCredentials为true的请求中会包含远程域的所有cookie,但这些cookie仍然遵循同源策略,所以你是访问不了这些cookie的。
二、Cookie介绍
Cookie是用于维持服务端会话状态的,通常由服务端写入,在后续请求中,供服务端读取。
HTTP请求,Cookie的使用过程:
1、server通过HTTP Response中的"Set-Cookie: header"把cookie发送给client
2、client把cookie通过HTTP Request 中的“Cookie: header”发送给server
3、每次HTTP请求,Cookie都会被发送。
HTTP请求发送Cookies的条件:
1、本地已经缓存有cookies
2、根据请求的URL来匹配cookies的domain、path属性,如果都符合才会发送。
举个例子:访问www.baidu.com时,就不发送www.qq.com的cookies.
Cookies查看:
大家可以使用抓包工具,这种工具就不多说,网上搜索出很多。使用这些工具中可以清晰的看到Http Request 中的Cookie, 和Http Response中的cookie
参考文献:HTTP请求中cookies的使用