0

我使用库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

GitHub上的这个问题

4

1 回答 1

1

cookie 由其域、路径和安全属性定义,您需要特别注意避免重复。

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

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

除了这些选项之外,我想不出发生这种情况的另一个原因。

我建议您遵循本指南,它会告诉您如何减少代码以缩小问题范围。

我们计划编写一些关于重复 cookie 的文档。在同一个链接中,您可以找到可能帮助您解决问题的相关主题。

我希望它有所帮助。

于 2015-10-08T23:29:39.930 回答