对于我们的前端应用程序,我们使用会话cookie进行身份验证。当用户需要进行身份验证时,他会被重定向到登录页面,之后他会被重定向到应用程序。会话cookie已设置。 丑陋的部分是我们对身份验证服务器没有任何控制权,而且从我看到的情况来看,对于来自客户端的每个请求,cookie中的值都会更新。
问题是,当用户想要注销时,我们只是删除会话cookie。这种方法在除Firefox之外的所有浏览器中都很有用。
出于某种原因,Firefox无法删除或更新cookie。当我们尝试这样做时,Firefox会立即创建一个具有有效值的新文件。
现在我们尝试了几件事:
我们尝试了以下代码:
IN
可能存在问题的任何想法?
答案 0 :(得分:1)
您是否尝试过this answer的此解决方案? :
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;';
}
您是否也看过有关Cookie的developer.mozilla.org页面?
语法:
docCookies.removeItem(name[, path[, domain]])
答案 1 :(得分:0)
在自己遇到类似问题后,我得出以下结论:与 Chrome 不同,Firefox 需要 path=/;
。最重要的是,domain=…
只能在 cookie 设置为域时提供。 Chrome 和 Firefox 的开发者工具在任何一种情况下都显示一个域。如果无法使用域集删除特定 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.0 版本中无法正常工作。您可以检查是否仅使用 HttpOnly
删除了 cookie(没有 console.log(document.cookie);
标志)。