为什么设置cookie时会有多个重复的条目?

时间:2015-10-08 09:31:14

标签: javascript cookies jquery-cookie js-cookie

我使用了库js-cookie。以前,我使用jquery.cookie。 我有一些重复cookie条目的问题。 有一段时间,当我打电话

Cookies.set('my-cookie-name', 'value', {'path': '/'});

我确信我在我的代码中只将这个方法称为一个地方,但结果我有:

---------------------------------------------------------------
Name               Value     Domain              Path
---------------------------------------------------------------
my-cookie-name     1         mydomain.com        /foo/bar/
my-cookie-name     value     mydomain.com        /
---------------------------------------------------------------

每次都不会发生这种情况。 这个问题很少发生,所以很难捕捉到。此时我在设置新值之前删除cookie并且不再发现问题。但我认为这是错误的用法。

名称为'my-cookie-name'的Cookie仅设置在一个代码位置。 这个问题我在我的开发机上遇到了,所以它不能成为一个旧的cookie。

我用它来切换一些状态。我的意思是这样的:

var state = 'on';
$elem.on('click', function(e){
    state = state === 'on' ? 'off' : 'on';
    Cookies.set('my-cookie-name', state, {path: '/'});
});

可能是错误的用法?我需要在设置新值之前删除旧cookie吗?

浏览器:Chrome v45

This issue on GitHub

1 个答案:

答案 0 :(得分:1)

Cookie由其域,路径和安全属性定义,您需要格外小心以避免重复。

但为什么会发生这种情况呢?这很难说,但这是我的理论:

  1. 即使您调用一次,用户也可能已在本地拥有Cookie。更改代码不会删除之前保留的cookie。
  2. 您可能在attributes参数中传递了Object Literal引用,然后另一个代码最终更改了Object,然后使用不同的Path运行cookie set操作。
  3. 另一个cookie在服务器中设置了不同的属性,因此当您尝试在客户端中设置时,它会重复。
  4. 某些代码正在改变运行时Cookies方法的行为,然后当您调用Cookies.set()时,它会复制cookie。
  5. 除了这些选项之外,我无法想到发生这种情况的另一个原因。

    我建议您关注this guide,它会告诉您如何减少代码以缩小问题范围。

    我们计划write some docs about duplicated cookies。在同一链接中,您可以找到可帮助您解决问题的相关主题。

    我希望它有所帮助。