localStorage 和 cookie 的区别
Same Origin Policy 保护 cookie 和 localStorage 免受无关域的访问。
不同之处在于 localStorage 只能通过 JavaScript 访问,而 cookie 可以通过 JavaScript1和随每个 HTTP 请求发送。
与 cookie 相比,使用 localStorage 并没有太多的安全优势。两者的区别在于目标不同:localStorage 可用于仅在 JavaScript 中使用的东西,而 cookie 可用于在服务器上存储您需要的东西(同样)。
有权访问用户计算机浏览器的任何人都可以访问这两者,并且本地存储和 cookie 都可以通过在网页上执行的 JavaScript 访问。 (对于后者,请参阅下面的例外情况。)
如果您在browser console 中输入localStorage 或document.cookie,则可以看到这一点。
- 您可以在 cookie 上设置 HTTPOnly 标志,使其无法通过 JavaScript 访问。
如何使用本地存储
由于已经有很多关于使用 localStorage 的信息,我将仅参考两个记录它的网站:
数据的存储方式
数据的存储方式因浏览器而异。下面,我将提供有关 Mozilla Firefox 如何存储 cookie 和本地存储的信息。
注意:有关如何查找 Firefox 配置文件的说明,请参阅 Mozilla 支持的 this article。
Cookies
Firefox 将您的 cookie 存储在您的配置文件文件夹中名为 cookies.sqlite 的文件中。这是一个SQLite 数据库。使用SQLiteStudio打开文件显示数据库包含一个表moz_cookies。
表结构
表格结构如下:
表格内容
这是我cookies.sqlite数据库的一部分内容:
本地存储
Firefox 将您的 localStorage 数据存储在您的配置文件文件夹中名为 webappsstore.sqlite 的文件中。这是一个SQLite 数据库。使用SQLiteStudio打开文件显示数据库包含一个表webappsstore2。
表结构
表格结构如下:
栏目内容结构:
表格内容
这是我webappsstore.sqlite数据库的一部分内容:
这与我在网页https://login.persona.org 的控制台中键入localStorage 时得到的数据相同。
结论
如您所见,来自 cookie 和本地存储的数据以相同的方式由浏览器存储。如果您担心存储在用户计算机上的数据的安全性,localStorage 提供不优于 cookie 的安全优势。
事实上,它甚至可能有更大的风险,因为您可以将 cookie 设置为在一定时间后过期,而 localStorage 不会过期。因此,保存在localStorage 中的数据在用户计算机上的保留时间可能比您使用 cookie 时的时间长。
(但是,如果您只需要在单个会话期间存储数据,则可以使用sessionStorage 而不是localStorage。)