如何用JavaScript跨所有域名删除Cookie?或按指定域名读取Cookie
为什么你的删除代码无效
浏览器的Cookie安全规则明确禁止使用通配符*作为domain属性值,这是为了防止恶意站点越权操作其他域名的Cookie。所以你之前的代码document.cookie = 'cookieName=; path=/; domain=*;expires=' + new Date(0).toUTCString();必然无法生效。
针对两个域名删除Cookie的可行方案
要删除www.abc.com和.www.abc.com下的同名Cookie,必须分别针对每个域名执行删除操作,且操作必须在对应域名的页面环境中进行(浏览器同源策略限制跨域直接操作Cookie):
- 删除
www.abc.com下的Cookie:
document.cookie = 'cookieName=; path=/; domain=www.abc.com; expires=' + new Date(0).toUTCString();
- 删除
.www.abc.com下的Cookie:
document.cookie = 'cookieName=; path=/; domain=.www.abc.com; expires=' + new Date(0).toUTCString();
注意:如果
.www.abc.com是笔误(通常父域设置为.abc.com可覆盖所有子域),只需将上述代码中的domain改为.abc.com即可批量删除所有子域下的对应Cookie。
指定域名读取Cookie的逻辑
浏览器不允许直接跨域读取Cookie,需根据场景选择对应方案:
1. 同域名/合法子域下读取
在目标域名的页面中,可通过以下函数读取指定名称的Cookie:
function getCookie(cookieName) { const cookieStr = document.cookie; const cookies = cookieStr.split('; '); for (let cookie of cookies) { const [name, value] = cookie.split('='); if (name === cookieName) { return decodeURIComponent(value); } } return null; } // 使用示例 const myCookie = getCookie('cookieName');
2. 跨域名读取(需跨域通信)
如果需要在A域名下读取B域名的Cookie,只能通过间接方式实现:
- iframe + postMessage:在A域名页面嵌入B域名的iframe,iframe读取自身域名的Cookie后,通过
postMessage将数据发送回A页面。 - 后端代理:由后端服务访问目标域名的接口(后端不受前端同源策略限制),读取对应Cookie后返回给前端。
内容的提问来源于stack exchange,提问作者Sadeesh
相关产品推荐
相关产品推荐

