我们在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与其他浏览器一样。
答案 0 :(得分:1)
当您使用Date对象的toUTCString()方法时,您将获得如下值:
Wed, 12 Dec 2012 12:41:08 GMT
如您所见,那里引用的最小单位是第二个。减去100毫秒可能给你一秒钟的时间如果脚本在前99毫秒内运行。大多数时候你只是设置一个cookie,它会在当前秒结束时到期,而IMO Opera在技术上是正确的,可以在那个秒的剩余时间内保持cookie(因此剩余的你的剧本)
(虽然我认为这是处理有点模棱两可的脚本的正确方法,但我也认为Opera可能应该将其过期策略与其他浏览器的兼容性进行调整,我似乎记得Opera的bug跟踪器中存在一个错误。这样做。)