使用JavaScript无法在Firefox中删除会话cookie

3

对于我们的前端应用程序,我们使用会话cookie进行身份验证。当用户需要进行身份验证时,他将被重定向到登录页面,之后再重定向到应用程序。会话cookie被设置。

问题在于,我们无法控制身份验证服务器,而且从我所看到的情况来看,每次客户端请求时,cookie中的值都会更新。

问题是,当用户想要退出登录时,我们只是删除会话cookie。这种方法在除Firefox浏览器外的所有浏览器中都很好用。

由于某些原因,Firefox不能删除或更新cookie。当我们尝试这样做时,Firefox立即创建一个具有有效值的新cookie。

目前,我们尝试了几件事情:

  1. 尝试删除cookie。
  2. 更新cookie(过期时间、名称等)。

我们尝试了以下代码:

$.removeCookie('cookie_key');

$.cookie('cookie_key', null); 

document.cookie = '';

有什么想法,问题可能出在哪里?

1
你能展示一下你是如何尝试做到这个的吗?我指的是代码。 - StudioTime
目前我们使用的是 $.removeCookie('cookie_key')。我们还尝试了 $.cookie('cookie_key', null) 和纯粹的 document.cookie = ''; - Stoyan Stoyanov
2个回答

1

您尝试过来自此答案的解决方案吗?

function delete_cookie( name, path, domain ) {
  if( get_cookie( name ) ) {
    document.cookie = name + "=" +
      ((path) ? ";path="+path:"")+
      ((domain)?";domain="+domain:"") +
      ";expires=Thu, 01 Jan 1970 00:00:01 GMT";
  }
}

或者:

function delete_cookie( name ) {
  document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT;';
}

你是否看过有关 cookies 的 developer.mozilla.org 页面?

语法:

docCookies.removeItem(name[, path[, domain]])


1
你好,我们已经尝试了前两个选项,在Firefox中没有结果。我将尝试来自developer.mozzila.org的解决方案,但我看到他们使用相同的方法将到期日期设置为1970年。但为了完整起见,我会尝试一下。再次感谢您的答复。 - Stoyan Stoyanov

0

在遇到类似问题后,我得出了以下结论:与Chrome不同,Firefox需要path=/;。此外,只有在使用域设置的情况下才能提供domain=…。Chrome和Firefox的开发者工具都会显示域名。如果无法删除设置了域的特定cookie,则尝试删除未设置域的cookie,反之亦然。当第二个参数适当设置时,以下代码对我在Chrome和Firefox中均有效:

const date = new Date(0).toUTCString();
function clearCookie(name, domain = true) {
    document.cookie = name + '=; path=/; expires=' + date + (domain ? '; domain=your-domain.example' : '');
}

此外,Firefox 开发者工具中存储选项卡中的刷新项目按钮在版本 88.0 中无法正常工作。您只能使用 console.log(document.cookie); 检查是否已删除 cookie(不带 HttpOnly 标志)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接