最近公司做了三个系统,分别放在三个不同的域名下,想要共用同一套登入登出功能,实现让用户感觉仿佛在使用同一套系统,无缝操作。
三个系统且称为 A, B, C。
A 部署在主域名下,假如叫做 zhuyuming.com
B 部署在它的子域名下,假如叫做 b.zhuyuming.com
C 同B,c.zhuyuming.com
我们采用cookie携带用户token的方式,将用户登录后,后端返回的token放在 zhuyuming.com下。
所以,A直接可以读取cookie,B 和 C 站点可以看到cookie 的domain 为 .zhuyuming.com,直接拿到 jwt, 它的cookie name 值为 jwt
但是当需要登出的时候,删除cookie,必须要连带它的domain一起删除。
两种实现方法:
如果系统是用vue写的,我用的是 vue-cookie ,写法是:
this.$cookie.delete('jwt', { domain: '.zhuyuming.com' });
如果是原生js或者,可以使用如下方式:
document.cookie = "jwt=; expires=Mon, 11 Nov 2011 01:01:01 GMT; domain=zhuyuming.com;path=/"
这里稍微解释一下,domain 可以设置它的父域名及自身域名,如果省略domain,默认为当前域名。
expires 需要是GMT格式的时间,只要是设置已经过去了的时间就可以删除这条cookie。
path 不能省略,会造成重名cookie重复设置,而做不到清空想清空的cookie。
关于如何操作cookie的一个博客https://www.cnblogs.com/maderlzp/p/7843365.html