uniapp如何清除指定域名下的所有cookie(plus.cookie)

在uniapp中使用plus.cookie时,如何清除指定域名下的所有cookie?我尝试过plus.cookie.remove方法,但只能删除单个cookie。有没有办法批量删除某个域名下的所有cookie?希望了解具体实现方案或示例代码。

2 回复

在uniapp中,使用plus.cookie.remove()无法直接清除指定域名下的所有cookie。可以尝试以下方法:

  1. 先获取所有cookie:plus.cookie.getAll()
  2. 遍历cookie列表,找到目标域名的cookie
  3. 逐个调用plus.cookie.remove()删除

注意:H5端不支持plus.cookie,需要使用document.cookie处理。


在 UniApp 中,可以使用 plus.cookie 接口清除指定域名下的所有 Cookie。以下是具体步骤和代码示例:

实现方法

  1. 获取指定域名的所有 Cookie:使用 plus.cookie.getAll() 获取所有 Cookie,然后筛选出目标域名的 Cookie。
  2. 逐个删除 Cookie:通过 plus.cookie.remove() 删除每个匹配的 Cookie。

代码示例

function clearCookiesByDomain(targetDomain) {
  // 获取所有 Cookie
  let allCookies = plus.cookie.getAll();
  
  // 遍历并删除目标域名的 Cookie
  allCookies.forEach(cookie => {
    if (cookie.domain.includes(targetDomain)) {
      plus.cookie.remove(cookie.domain, cookie.name);
    }
  });
  
  console.log(`已清除域名 ${targetDomain} 下的所有 Cookie`);
}

// 调用示例:清除 "example.com" 下的所有 Cookie
clearCookiesByDomain("example.com");

注意事项

  • 域名匹配:代码使用 includes 进行简单匹配,确保目标域名(如 example.com)包含在 Cookie 的 domain 属性中。可根据需求调整匹配逻辑(如精确匹配)。
  • 平台限制plus.cookie 主要在 App 端生效,H5 环境需使用 document.cookie 处理。
  • 权限:确保应用有操作 Cookie 的权限(通常 App 端默认支持)。

替代方案(H5 环境)

若在 H5 环境,需使用浏览器标准 API:

function clearCookiesByDomainH5(domain) {
  document.cookie.split(";").forEach(cookie => {
    const eqPos = cookie.indexOf("=");
    const name = eqPos > -1 ? cookie.substr(0, eqPos).trim() : cookie;
    document.cookie = `${name}=;expires=Thu, 01 Jan 1970 00:00:00 GMT; domain=${domain}; path=/`;
  });
}

根据实际运行环境选择对应方法即可。

回到顶部