0

我们在 Opera 中遇到了 cookie 的有趣行为:我们应该将expires选项设置为超过一秒才能删除 cookie。如果我们这样做:

var date = new Date();

date.setTime( date.getTime() - 100 );
cookie('c', 'value', { expires: date });
expect(cookie('c')).toBeNull();

测试将失败。但是如果我们设置 1000 而不是 100 它将通过。但在其他浏览器中一切正常。我们使用toUTCString()过期方法。

奇怪的是:Opera 的行为与其他浏览器不同。哪种行为不正确?歌剧还是其他?

有什么想法吗?

PS 我的意思是 Safari、Chrome 和 Firefox 作为其他浏览器。

4

1 回答 1

1

当您使用 Date 对象的 toUTCString() 方法时,您将获得如下值:

Wed, 12 Dec 2012 12:41:08 GMT

如您所见,这里引用的最小单位是一秒。如果脚本在一秒的前 99 毫秒内运行,则减去 100 毫秒可能会给您一秒前的时间。大多数情况下,您只需设置一个 cookie,该 cookie 将在当前秒结束时过期,而 IMO Opera 在技术上正确地将该 cookie 保留在那一秒的剩余时间(以及脚本的剩余部分)。

(虽然我认为这是处理有点模棱两可的脚本的正确方法,但我也认为 Opera 可能应该将其过期策略与其他浏览器保持一致以实现兼容性,而且我似乎记得 Opera 的错误跟踪器中有一个错误这样做) .

于 2012-12-12T12:48:00.567 回答