Javascript 使用localStorage代替Cookie有什么缺点吗?

Javascript 使用localStorage代替Cookie有什么缺点吗?,javascript,html,cookies,local-storage,Javascript,Html,Cookies,Local Storage,在我以前的网站上,我通常只在第一次访问时使用cookie来显示主页。这很有效(),但使用cookies在今天并不流行,所以我想尽量避免使用cookies 现在,我的新网站项目几乎总是通过javascript(显示一个modalbox)启动,所以我不需要在服务器端执行任何操作。我正在考虑使用HTML5 localStorage而不是Cookie,如果浏览器没有localStorage,可以使用Cookie。这是个好主意吗?对可用性、隐私保护和网站性能有何影响 使用localStorage将提高禁用

在我以前的网站上,我通常只在第一次访问时使用cookie来显示主页。这很有效(),但使用cookies在今天并不流行,所以我想尽量避免使用cookies

现在,我的新网站项目几乎总是通过javascript(显示一个modalbox)启动,所以我不需要在服务器端执行任何操作。我正在考虑使用HTML5 localStorage而不是Cookie,如果浏览器没有localStorage,可以使用Cookie。这是个好主意吗?对可用性、隐私保护和网站性能有何影响

使用localStorage将提高禁用Cookie的用户的可用性。但我知道HTML5的一些功能在某些浏览器中只是选择性加入(比如地理本地化)。在任何浏览器上对localStorage都有类似的限制吗?如果本地存储可用但对我的站点停用,是否会出现JS错误?

。不过,这可能会派上用场,因为你知道你的数据都是客户端的,所以不会被嗅探

Cookie无法写入,只能添加到并读取:

alert(document.cookie);
document.cookie = "nope";
alert(document.cookie);
可用性 用户将不知道您使用的是本地存储还是cookie。如果用户禁用Cookie,localStorage也将无法工作

演出 这两种方法之间没有明显的速度差异

会话存储 会话存储仅用于该浏览器选项卡的会话。如果关闭该选项卡,会话将丢失,数据也将丢失,这类似于任何后端语言上的会话变量

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

你的问题
  • 您没有使用此数据服务器端,因此不需要cookie。与cookie不同,localStorage从不发送到服务器
  • 如果用户禁用Cookie,localStorage也将无法工作
  • 回退示例 您可以使用Modernizer来验证本地存储是否可用,如果不可用,则使用存储cookie

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

    您也可以放弃Modernizer并使用检查
    存储类型!='未定义的“

    比较LS和Cookie就是比较苹果和橙子

    Cookies和LS是完全不同的东西,用于不同的目的。LS是一个允许客户端(javascript代码)本地存储数据的工具,而无需将数据传输到服务器。Cookies是一种用于客户机-服务器通信的工具。Cookie的全部要点是随每个请求一起发送


    在过去,cookie经常被滥用来模拟本地存储,这仅仅是因为javascript应用程序唯一可能将任何内容写入客户端的硬盘驱动器。但一般来说,LS不能代替cookie,因此,如果您需要客户端和服务器都应该读写的东西,请使用cookie,而不是LS。

    要添加一点,与cookie通常共享的跨协议不同,存储坚持同源策略。因此,站点共享同一个域,但托管在不同协议上的站点不共享存储的数据


    说明您的网站是否需要跨http和https工作。例如,当用户单击“购买链接”时,他们将登录https安全签出,那么签出将无法检索以前存储在http站点上的数据,即使他们共享同一个域。

    -1您可以使用sessionStorage,因此没有您所说的嗅探。可以编写cookie<代码>警报(document.cookie);document.cookie=“test=nope”;警报(document.cookie);document.cookie=“test=yesp”;警报(document.cookie)是的,但是
    写在上面
    ,比如,原始的东西仍然存在。这个答案更多地与
    会话存储
    本地存储
    有关,而不是与
    cookie
    有关,比如OPwanted@just.another.programmer“我不知道你们是否读过他的问题,但他并不是在问饼干,”他写道“我不需要在服务器端执行任何操作”,所以他不需要cookie,他需要localStorage或SessionStorage来检测localStorage支持(为了提供回退解决方案),我只需使用
    if(window.localStorage)
    @FabienQuatravaux用户不会看到任何区别,因为如果禁用cookies,
    cookies
    将不起作用,
    localStorage
    也不起作用。localStorage没有限制
    opt-in
    你是对的!至少在Chrome中,禁用cookies也会禁用localStorage。我错了,因为如果“饼干”“被禁用,访问
    窗口。localStorage
    将引发异常,而使用
    Modernizer。localStorage
    将返回false。”。非常感谢您的帮助。我不想在一般情况下比较LocalStorage和Cookie,这很愚蠢,但仅限于我在这里描述的情况。正如我所说的,我不需要在服务器上返回一些东西,所以cookie和LocalStorage都可以。但是哪一个是最好的?@FabienQuatravaux:如果你不需要在服务器端做任何事情,那么LS就可以了。有趣的是,现在可能会有滥用本地存储的情况……这对我来说更有意义。LS与会话变量更具可比性;一种跨页面(或用户的设置或首选项)保存数据而不存储在数据库中的方法。