Open toFrankie opened 1 year ago
有个需求,将 cookie 设置到我们的二级域名上,在不同的项目都可以公用。
.
/
如何获取二级域名,以 shortcuts.sspai.com 为例:
shortcuts.sspai.com
接着我们对 URL 进行拆分,按先后顺序对 com、sspai.com、shortcuts.sspai.com (以此类推)设置 cookie。倘若能设置 cookie 则说明域名是合法的,此时停止继续往下执行,直接返回结果 sspai.com,同时删掉该 cookie。
com
sspai.com
baidu.com
/** * 获取当前 URL 二级域名 * 如果当前是 IP 地址,则直接返回 IP Address */ function getSubdomain() { try { let subdomain = '' const key = `mh_${Math.random()}` const expiredDate = new Date(0) const { domain } = document const domainList = domain.split('.') const reg = new RegExp(`(^|;)\\s*${key}=12345`) const ipAddressReg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/ // 若为 IP 地址、localhost,则直接返回 if (ipAddressReg.test(domain) || domain === 'localhost') { return domain } const urlItems = [] urlItems.unshift(domainList.pop()) while (domainList.length) { urlItems.unshift(domainList.pop()) subdomain = urlItems.join('.') const cookie = `${key}=12345;domain=.${subdomain}` document.cookie = cookie if (reg.test(document.cookie)) { document.cookie = `${cookie};expires=${expiredDate}` break } } return subdomain || document.domain } catch (e) { return document.domain } }
背景
有个需求,将 cookie 设置到我们的二级域名上,在不同的项目都可以公用。
准备
.
来分隔;/
)思路
如何获取二级域名,以
shortcuts.sspai.com
为例:接着我们对 URL 进行拆分,按先后顺序对
com
、sspai.com
、shortcuts.sspai.com
(以此类推)设置 cookie。倘若能设置 cookie 则说明域名是合法的,此时停止继续往下执行,直接返回结果sspai.com
,同时删掉该 cookie。其他
baidu.com
应属于二级域名。实现
参考