【问题标题】:If a browser blocks a persistent cookie, will it still be available as a session cookie?如果浏览器阻止了持久性 cookie,它是否仍可用作会话 cookie?
【发布时间】:2014-04-03 08:26:53
【问题描述】:

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

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

【问题讨论】:

    标签: cookies browser


    【解决方案1】:

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

    被阻止的持久性 cookie 不会被隐式“降级”为会话 cookie,它们根本不会被存储 - 请参阅下面的实验。

    您可能会想“是的,这很明显,您不理解 'blocked' 这个词的哪一部分?”。如果您想使用持久 cookie 并回退到会话 cookie,请记住这一点。

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

    这是我在 Internet Explorer 11 中运行的一个实验。

    第 1 步:存储一些示例 cookie,其设置接受会话和持久性 cookie

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

    浏览到http://stackoverflow.com,打开 F12 开发者工具并在控制台窗口中运行以下脚本:

    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 步:存储一些示例 cookie,其设置接受会话 cookie 但阻止持久性 cookie

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

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

    浏览回http://stackoverflow.com 并再次运行上述脚本。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2016-04-24
        • 2013-03-06
        • 2013-06-10
        • 2013-05-14
        • 2021-10-25
        • 2012-09-16
        • 1970-01-01
        • 2022-01-21
        • 1970-01-01
        相关资源
        最近更新 更多