最近公司做了三個系統,分別放在三個不同的域名下,想要共用同一套登入登出功能,實現讓用戶感覺仿佛在使用同一套系統,無縫操作。
三個系統且稱為 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