使用localStorage而不是Cookies有什么缺点?

在我以前的网站上,我以前只是在第一次访问时才使用cookie来显示预置主页。 这很好( 例如在这里看到 ),但使用cookie并不是如此新潮,所以我想尽可能地避免它。

现在,我的新网站项目几乎总是通过javascript(显示一个模式框)启动预置家,所以我不需要在服务器端做任何操作。 我正在考虑使用HTML5 localStorage而不是cookie,如果浏览器没有localStorage,则会返回cookie。 这是一个好主意吗? 对可用性,隐私保护和网站性能有什么影响?

使用localStorage可以提高禁用cookies的用户的可用性。 但是我知道某些HTML5function只能在某些浏览器中select使用(如地理定位)。 在任何浏览器上对localStorage有没有限制? 是否有任何情况下,如果localStorage可用,但我的网站停用,我会得到一个JS错误?

可用性

用户不知道您是否使用localStorage或cookie。 如果用户禁用cookies,则localStorage也不起作用。

性能

两种方法之间没有明显的速度差异。

的sessionStorage

sessionStorage仅用于该浏览器选项卡的会话。 如果closures该选项卡,会话将丢失,数据也会丢失,这与任何后端语言的会话variables类似。

localStorage的

localStorage将可用于浏览器中的任何选项卡或窗口,并将存在,直到它被用户或程序删除。 与cookie不同,您不能设置到期。 localStorage也有更大的存储限制。

你的问题

  1. 你不使用这个数据服务器端,所以你不需要一个cookie。 localStorage不会像Cookie一样发送到服务器。
  2. 如果用户禁用cookies,则localStorage也将不起作用。

后备示例

您可以使用Modernizr来validationlocalStorage是否可用,如果没有,请使用存储cookie。

if (Modernizr.localstorage) { // supports HTML5 Storage :D } else { // does not support HTML5 Storage :( } 

您也可以放弃Modernizr并使用typeof Storage !== 'undefined'检查typestypeof Storage !== 'undefined'

比较LS vscookies是比较苹果和橙子。

Cookies和LS是完全不同的东西,用于不同的目的。 LS是一个工具,它允许您的客户端 (JavaScript代码)在本地存储其数据,而不会传输到服务器。 Cookies是用于客户端 – 服务器通信的工具。 cookies的全部内容将随每个请求一起发送。

在过去,cookies往往被滥用来模拟本地存储,只是因为它是JavaScript应用程序向客户端硬盘写入任何东西的唯一可能性。 但是一般来说LS不是cookie的替代品,所以如果你需要客户端和服务器端应该读写的东西,那么就使用cookies而不是LS。

有一点要补充的是,与cookie正常共享的交叉协议不同,存储遵循同源策略。 因此,站点共享相同的域,但托pipe在不同的协议上不共享存储的数据。

说你的网站是否需要通过http和https工作。 例如,当用户点击“购买链接”时,他们将登陆https安全结账,那么即使他们共享相同的域名,结账也将无法检索之前存储在http站点上的数据。

服务器读取localStorage并不容易 。 这可能会派上用场,虽然知道你的数据都是客户端的,从而使其免受嗅探的危害。

Cookies不能被覆盖,只能添加和阅读:

 alert(document.cookie); document.cookie = "nope"; alert(document.cookie);