可以禁用会话存储/本地存储并启用 Cookies 吗?

Posted

技术标签:

【中文标题】可以禁用会话存储/本地存储并启用 Cookies 吗?【英文标题】:Can Session storage / local storage be disabled and Cookies enabled? 【发布时间】:2014-12-20 11:02:15 【问题描述】:

对于大多数现代浏览器,是否可以在启用 cookie 时禁用会话或本地存储?或者禁用 cookie 是否也会自动禁用会话/本地存储的使用?

【问题讨论】:

我没有关注你想要做什么?你的用例是什么?为什么在使用 cookie 时要关闭浏览器中的存储?一个不干扰另一个。 @MagnusKarlsson - 我的问题很明确,我没有说我正在尝试做任何事情。我只是在询问用户禁用 cookie 之间的关系,以及是否通过这样做,会话或本地存储也被禁用。 那么不清楚,因为您的评论实际上澄清了您的要求。我的问题是想知道您是否有任何可以使用 Chromium 或其他浏览器解决的特殊用例,但我想那时不会。 【参考方案1】:

从技术上讲,cookie 和 Web Storage API 是不同的东西,但普通用户可能不知道,也不需要知道区别。然而,一位普通用户听说过 cookie 的安全问题。他可能还听过有关定期清除 cookie 或完全禁用它们的建议。因此,普通用户期望一个功能说“禁用 Cookies”,但实际上意味着“不要让网站在我的计算机上保存数据”。

我相信这就是为什么大多数浏览器继续提供熟悉的禁用“Cookies”功能的原因,但为了满足他们认为的实际用户意图,当然要做的远不止这些。

目前,该行为取决于浏览器。在这些浏览器中禁用 cookie 会禁用以下功能:

Chrome:cookies、localStorage、sessionStorage、IndexedDB Firefox:cookies、localStorage、sessionStorage IE:仅 Cookie

我确实认为,为了精确和灵活,浏览器供应商应该调整他们的实施,以提供一个基本选项“不要让网站在这台计算机上存储数据”,它会禁用 cookie 和所有持久存储机制,以及用于单独禁用各种存储机制的“高级设置”功能。

【讨论】:

您好,感谢您的信息。顺便问一下,您在哪里找到相应的每个浏览器的行为?【参考方案2】:

我能找到的只是W3C Web Storage Specification 的第 6.1 节:

将持久性存储视为 cookie

如果用户试图通过清除 cookie 来保护他们的隐私,而不清除存储在本地存储区域中的数据,则站点可以通过使用这两个功能作为彼此的冗余备份来挫败这些尝试。用户代理应该以一种有助于用户理解这种可能性并使他们能够同时删除所有持久性存储功能中的数据的方式呈现用于清除这些的接口。

浏览器“应该”启用同时删除功能,但没有建议单独切换本地存储和 cookie。

也就是说,在 IE 11 中,我可以 disable DOM storage 但启用 cookie。相反,禁用 cookie 对 DOM 存储没有影响。在 FF 和 Chrome 最新版本中,禁用 cookie 似乎也会禁用 DOM 存储。

【讨论】:

【参考方案3】:

如果您禁用 cookie,则本地存储将无法使用。我刚试过。

试试下面的步骤,看看

谷歌浏览器

    step 1 :
    Select the Chrome menu icon Chrome menu.
    Select Settings.
    Near the bottom of the page, select Show advanced settings.
    In the "Privacy" section, select Content settings.
    Select Block sites from setting any data.
    Select Done.

    Step 2 : Open browser console and type localstorage.name="test". This will throw below error

    Uncaught DOMException: Failed to read the 'localStorage' property from 'Window': Access is denied for this document.
        at Error (native)
        at <anonymous>:2:1
        at Object.InjectedScript._evaluateOn (<anonymous>:895:140)
        at Object.InjectedScript._evaluateAndWrap (<anonymous>:828:34)
        at Object.InjectedScript.evaluate (<anonymous>:694:21)

    Step 3 : now enable cookie and try it out . Local Storage will work

火狐:

与我在 Firefox 中测试的相同,它的工作方式相同。

尝试以下步骤:

Step 1:
    Click the menu button  New Fx Menu and choose Options.
    Select the Privacy panel.
    Set Firefox will: to Use custom settings for history. 
    Now disable accept cookies from site

Step 2:
Open browser console and try localstorage.name="test" . This will fail as below
SecurityError: The operation is insecure.

Step 3: 
Now enable cookie and try it will work.

因此,如果不启用 cookie,localstorage 将无法在 chrome 和 firefox 上运行。

【讨论】:

我很欣赏 Chrome 和 Firefox 的详细信息。不幸的是,您的第一句话(“如果您禁用 cookie,则本地存储将无法工作。”)仅适用于某些浏览器。例如,在 IE 中,禁用 cookie 会禁用 cookie:您必须单独禁用本地存储,深入高级设置的复选框。 谢谢主教。但是仍然很难将 IE 视为现代浏览器 :P 。所以我没有对此进行测试

以上是关于可以禁用会话存储/本地存储并启用 Cookies 吗?的主要内容,如果未能解决你的问题,请参考以下文章

cookies,sessionStorage和localStorage 的区别

cookies,sessionStorage 和 localStorage 的区别?

HTML5 本地存储

cookies是啥意思?有啥用

HTML5 本地存储 LocalStorage

PHP 会话与 Cookies [重复]