如果应用程序尝试设置永久cookie,但浏览器的安全设置配置为阻止永久cookie,浏览器是否会将其视为会话cookie,并将其存储到浏览会话结束为止?
如果你想存储用户购物篮的id或类似的东西,你需要知道这一点。如果浏览器接受的话,你会希望它使用一个持久的cookie,否则会退回到一个会话cookie。
发布于 2014-04-03 18:23:42
好吧,我变得不耐烦了,自己做了一些实验。
阻塞的持久化cookies不会隐式地“降级”为会话cookies,它们根本不会被存储--参见下面的实验。
你可能会想:“是的,这很明显,你不明白‘阻止’这个词的哪一部分?”如果您想要使用持久cookie并回退到会话cookie,请记住这一点。
在上面的购物篮场景中,最好的方法可能是将购物篮id同时存储在持久cookie和会话cookie中。如果永久cookie被阻止,那么至少您可以在浏览器会话的其余部分使用会话cookie。
这是我在Internet Explorer11上运行的一个实验。
步骤1.使用同时接受会话和持久cookies的设置存储一些示例cookies
浏览到http://stackoverflow.com,打开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的行为在不同的浏览器中是不同的,并且可能会混淆实验-例如,Chrome doesn't always delete session cookies。
步骤2.使用接受会话cookies但阻止持久cookies的设置存储一些示例cookies
在IE中,打开Internet Options - Privacy Tab - Advanced Button For First-party Cookies,选择"Block“并选中"Always allow session cookies”
重新浏览到http://stackoverflow.com并再次运行上面的脚本。
这一次,document.cookie输出"session1=test“--只存储了会话cookie。被阻止的持久cookie根本没有存储,甚至不能作为会话cookie使用。
发布于 2019-12-09 12:31:21
持久化cookie保持为持久化。会话cookies仅是会话的cookies。持久性cookie是持久性的,这就说明了一切。
https://stackoverflow.com/questions/22831916
复制相似问题