JavaScript重复Cookie

时间:2017-09-03 15:56:47

标签: javascript cookies duplicates frontend session-cookies

我将Hapi框架用于Node.js应用程序,而Hapi框架附带了自己的Cookie管理工具,我将其用于身份验证。

然后框架设置一个名为session的cookie,其json值编码为base64。域名设置为example.com(不是.example.com)

现在,问题在于当我尝试编辑此cookie客户端时,通过执行以下操作

document.cookie = 'session=' + btoa(JSON.stringify(_decoded)) + "; path=/; domain=example.com";

这实际上是使用域' .example.com'

设置了一个重复的Cookie

我还没有要求Javascript添加点,我似乎无法摆脱它。

我假设是因为这个点,所以cookie被复制了。如何在没有自动添加点的情况下设置域?

修改

我已经放弃尝试删除前导点,而是尝试删除旧cookie,然后创建一个新cookie。但是我最终还是会有重复的Cookie!

  1. 导航至/ login并输入登录详细信息
  2. 重定向到/ account和服务器设置的cookie(没有前导点)
  3. 执行Javascript删除并重新创建cookie
  4. 现在存在1个cookie,并且在域
  5. 之前有一个前导点

    上述行为很好,但是也会发生以下情况,这是不好的

    1. 导航至/ login并输入登录详细信息
    2. 重定向到/ account和服务器设置的cookie(没有前导点)
    3. 导航至/ example
    4. 执行Javascript删除并重新创建cookie
    5. 现在存在2个cookie,一个带有前导点(由JS创建),另一个没有(由服务器创建)
    6. 我使用的代码是

      API.Session = {
          Encoded : function () { return document.cookie.replace(/(?:(?:^|.*;\s*)session\s*\=\s*([^;]*).*$)|^.*$/, "$1")},
          Decoded : function () { return JSON.parse(atob(this.Encoded()))},
          Update : function (_decoded) { 
              document.cookie = 'session=; expires=Thu, 01 Jan 1970 00:00:01 GMT;';
              document.cookie = 'session=' + btoa(JSON.stringify(_decoded)) + "; path=/; domain=example.com;";      
          }
      }
      
      API.Helpers.ShowAdvancedOptions = function () {
          var s = API.Session.Decoded()
          s.ShowAdvancedOptions = true
          API.Session.Update(s)
      }
      

2 个答案:

答案 0 :(得分:0)

原来的cookie是否已经存在于此?

btoa(JSON.stringify(_decoded))

原因来自: document.cookie

document.cookie定义为:

  

包含所有Cookie的以分号分隔的列表的字符串

所以在我看来,你正在为该列表添加一个新的分号分隔值(新cookie)(不删除原始cookie)

好吧,不是吗,你试过这个吗?

link

听起来与您描述的问题相同

答案 1 :(得分:0)

对于有类似问题的任何人,最终通过完全删除域属性来解决这个问题。见other related question