无法使用JavaScript

时间:2015-04-22 09:50:27

标签: javascript session firefox cookies

对于我们的前端应用程序,我们使用会话cookie进行身份验证。当用户需要进行身份验证时,他会被重定向到登录页面,之后他会被重定向到应用程序。会话cookie已设置。 丑陋的部分是我们对身份验证服务器没有任何控制权,而且从我看到的情况来看,对于来自客户端的每个请求,cookie中的值都会更新。

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

出于某种原因,Firefox无法删除或更新cookie。当我们尝试这样做时,Firefox会立即创建一个具有有效值的新文件。

现在我们尝试了几件事:

  1. 尝试删除Cookie。
  2. 更新cookie(过期,名称等)。
  3. 我们尝试了以下代码:

    IN

    可能存在问题的任何想法?

2 个答案:

答案 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); 标志)。