![如何清除 Safari 中的所有 HTML5 本地存储?](https://linux22.com/image/1262955/%E5%A6%82%E4%BD%95%E6%B8%85%E9%99%A4%20Safari%20%E4%B8%AD%E7%9A%84%E6%89%80%E6%9C%89%20HTML5%20%E6%9C%AC%E5%9C%B0%E5%AD%98%E5%82%A8%EF%BC%9F.png)
它似乎stackauth.com
使用了一些 Safari 未显示的本地存储,因此无法删除。因此,一般来说:如何确保全部本地存储已从 Safari 中删除?
一些背景和细节:
这HTML5 本地存储允许网站在计算机上存储信息。(这有点像 cookies,但内容不会自动发送到服务器。)例如,当用户登录到(新)Twitter 网站后,在查看该网站并将以下内容粘贴到地址栏时,即使当前未登录,也会显示很多详细信息†:
javascript:alert(localStorage.getItem(':USER:'));
要删除这些数据:在 Google Chrome 中,点击“删除 cookies 和其他网站数据”即可。在 Firefox 中,只要删除 cookies,这些数据也会被删除。但在 Safari 中则不然。
在 Safari 中,安全中似乎有一个相关的首选项,即“显示数据库”按钮。但是:Safari 中的“显示数据库”列表并未提及stackauth.com,正如 Stack Exchange 所用全球网络自动登录。使用“全部删除”后,我仍然在该网站上得到结果:
javascript:alert(localStorage.getItem('GlobalLogin'));
我可以使用 删除它javascript:localStorage.clear();
。但是我需要知道站点已存储数据。这个问题不仅仅与 StackAuth 有关;我想确保其他站点也不会被隐藏在列表中。
(我用的是 Mac,在最新的 OS X 上使用最新的 Safari。)
†当弹出窗口太大而看不到任何关闭按钮时,请按 Esc 或 Return 键关闭警告对话框。
答案1
在较新版本的 Safari 中(我现在使用的是 5.1 版),可以使用 Safari » 重置 Safari » 删除所有网站数据来清除本地存储。或者使用 Safari » 偏好设置 » 隐私标签页 » Cookie 和其他网站数据 » 删除所有网站数据。甚至可以在查看同一个隐私标签页上的详细信息时使用全部删除。安全标签页不再显示任何用于查看数据库的按钮。
更多详细信息(也适用于旧版本):
在 Mac 上,我找到了文件夹,其中包含每个使用本地存储†~/Library/Safari/LocalStorage
的网站的文件,其创建日期设置为我第一次访问每个网站时。在 Windows 上,它可能位于或 之类的文件夹中。%APPDATA%\Apple\Safari
%APPDATA%\Apple Computer\Safari
删除所有这些文件并重新启动 Safari,显然也会清除 StackAuth 的数据。
但是,登录到随机 Stack Exchange 网站时,我又获得了 StackAuth 数据,以及上述文件夹中的一个文件,而系统从未提示我允许这样做(我的 Safari 偏好设置显示“数据库存储:询问前不允许"),并且域名不会显示在“显示数据库”列表中。在隐私浏览模式下也会发生这种情况。
这似乎是由 HTML5 之间的差异引起的Web 数据库和 HTML5Web 存储(后者包括本地存储)。Chrome 显示两个都对于 Twitter:
显然 Safari 只会对数据库发出警告,而不会对本地存储发出警告?也许阻止本地存储会像停止 Adobe Flash留下隐私痕迹。规格状态:
用户代理仅应出于安全原因或应用户要求时使本地存储区域的数据过期。
希望有人知道更简单的方法,或者希望我们在未来的版本中能获得更多控制权。(我为此向 Apple 提交了功能请求。)
†就我而言,我发现了 5,904 个可追溯到 2009 年 3 月的项目。甚至我自己的域名(我确信没有使用本地存储)也列出了每个 8kb 的文件。调查显示,Alexey Ruzanov 的FlashBlock 用户脚本也使用本地存储,因此无论是否使用本地存储,也无论是否使用 Flash,都会为每个访问的站点生成一个文件。
答案2
我的解决方案有些不同:
在 Windows 上:
- 按住 Ctrl + Alt + C。
- 在弹出的窗口中输入以下代码,然后单击Enter键:
localStorage.clear()
在Mac上:
- 按住 Cmd + Opt + C。
- 在弹出的窗口中输入以下代码,然后单击Enter键:
localStorage.clear()