过期的歌曲饼干

时间:2012-12-10 08:32:40

标签: javascript cookies opera

我们在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的行为与其他浏览器不同。哪种行为不正确?歌剧还是其他人?

有什么想法吗?

P.S。我的意思是Safari,Chrome和Firefox与其他浏览器一样。

1 个答案:

答案 0 :(得分:1)

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

Wed, 12 Dec 2012 12:41:08 GMT

如您所见,那里引用的最小单位是第二个。减去100毫秒可能给你一秒钟的时间如果脚本在前99毫秒内运行。大多数时候你只是设置一个cookie,它会在当前秒结束时到期,而IMO Opera在技术上是正确的,可以在那个秒的剩余时间内保持cookie(因此剩余的你的剧本)

(虽然我认为这是处理有点模棱两可的脚本的正确方法,但我也认为Opera可能应该将其过期策略与其他浏览器的兼容性进行调整,我似乎记得Opera的bug跟踪器中存在一个错误。这样做。)