Cookies 如果浏览器阻止了持久cookie,它是否仍然可以作为会话cookie使用?

Cookies 如果浏览器阻止了持久cookie,它是否仍然可以作为会话cookie使用?,cookies,browser,Cookies,Browser,如果应用程序试图设置持久cookie,但浏览器的安全设置被配置为阻止持久cookie,浏览器是否会将其视为会话cookie,并将其存储到浏览会话结束 如果要存储用户购物篮或类似物品的id,则需要知道这一点。如果浏览器接受,您希望它使用持久性cookie,否则返回会话cookie。好的,我不耐烦了,自己做了一些实验 被阻止的持久cookie不会隐式地“降级”到会话cookie,它们根本不会被存储——请参见下面的实验 你可能会想,“是的,很明显,你不明白‘阻塞’这个词的哪一部分?”。如果您想使用持久

如果应用程序试图设置持久cookie,但浏览器的安全设置被配置为阻止持久cookie,浏览器是否会将其视为会话cookie,并将其存储到浏览会话结束


如果要存储用户购物篮或类似物品的id,则需要知道这一点。如果浏览器接受,您希望它使用持久性cookie,否则返回会话cookie。

好的,我不耐烦了,自己做了一些实验

被阻止的持久cookie不会隐式地“降级”到会话cookie,它们根本不会被存储——请参见下面的实验

你可能会想,“是的,很明显,你不明白‘阻塞’这个词的哪一部分?”。如果您想使用持久性cookie并退回到会话cookie,那么需要记住这一点

在上面的购物篮场景中,最好的方法可能是将购物篮id存储在持久cookie和会话cookie中。如果持久cookie被阻止,那么至少可以在浏览器会话的其余部分使用会话cookie。在用户下次访问站点时(会话cookie被删除后),如果持久cookie可用,您可以使用持久cookie恢复他们的篮子

这是我在InternetExplorer11中运行的一个实验

第1步。使用同时接受会话和持久cookie的设置存储一些示例cookie

在IE中,打开Internet选项-隐私选项卡-高级按钮 对于第一方cookie,选择“接受”并选中“始终允许会话cookie”

浏览到,打开F12 developer tools并在控制台窗口中运行以下脚本:

var expiry = new Date();
expiry.setDate(expiry.getDate() + 7);
// set a persistent cookie
document.cookie='persistent1=test;path=/;expires=' + expiry.toUTCString();
// set a session cookie
document.cookie='session1=test;path=/'; 
document.cookie;    
正如我们所期望的那样,document.cookie输出“persistent1=test;session1=test”

关闭并重新打开IE,然后从控制台再次运行“document.cookie”。持久cookie保留,但会话cookie已消失

到目前为止还没有什么新的东西,这是显而易见的。然而,会话cookie行为因浏览器而异,可能会混淆实验——例如

第2步。使用接受会话cookie但阻止持久cookie的设置存储一些示例cookie

删除浏览历史记录,让我们重新开始

在IE中,打开Internet选项-隐私选项卡-高级按钮 对于第一方cookie,选择“阻止”并选中“始终允许会话cookie”

浏览返回并再次运行上述脚本


这一次,document.cookie输出“session1=test”-只存储了会话cookie。被阻止的持久性cookie根本没有被存储,并且不可用,即使作为会话cookie也不可用。

持久性cookie仍然保持持久性。 会话cookies只是会话的cookies。 持久性cookies是持久性的,这就说明了一切