当前位置: 首页 > 知识库问答 >
问题:

localStorage、sessionStorage、session和Cookie之间有什么区别?

长孙宜
2023-03-14

localStorage、sessionStorage、session和cookie在技术上的优缺点是什么?我什么时候会使用其中一个而不是另一个?

共有1个答案

任昊阳
2023-03-14

这是一个范围极其广泛的问题,许多赞成/反对意见将与情况相关联。

在所有情况下,这些存储机制将特定于单个计算机/设备上的单个浏览器。任何跨会话持续存储数据的要求都需要涉及应用程序服务器端--最有可能使用数据库,但也可能使用XML或text/csv文件。

localStorage、sessionStorage和Cookie都是客户端存储解决方案。会话数据保存在您直接控制的服务器上。

从积极的方面来看,Cookie可以通过设置HTTP only标志来防止跨站点脚本(XSS)/脚本注入等安全风险,这意味着现代(支持)浏览器将阻止从JavaScript访问Cookie和值(这也将阻止您自己的合法JavaScript访问它们)。对于身份验证cookie来说,这一点尤其重要,它用于存储包含登录用户详细信息的令牌--如果您有该cookie的副本,那么就web应用程序而言,您将成为该用户,并拥有与用户相同的数据和功能访问权限。

由于cookie用于身份验证和用户数据的持久化,所以对于同一个域的每一个请求,所有对页面有效的cookie都从浏览器发送到服务器--这包括原始页面请求、任何后续的Ajax请求、所有图像、样式表、脚本和字体。由于这个原因,不应该使用cookie来存储大量信息。浏览器还可能对可以存储在cookie中的信息的大小施加限制。通常,Cookie用于存储身份验证、会话和广告跟踪的标识令牌。标记本身通常不是人类可读的信息,而是链接到应用程序或数据库的加密标识符。

就功能而言,Cookie、sessionStorage和localStorage只允许存储字符串--可以在设置时隐式转换原始值(读取后需要转换回原始值以将其用作类型),但不允许对象或数组(可以通过JSON序列化它们以使用API存储它们)。会话存储通常允许您存储服务器端语言/框架支持的任何原语或对象。

由于HTTP是一个无状态协议--web应用程序无法在返回web站点时从以前的访问中识别用户--会话数据通常依赖于cookie令牌来识别用户的重复访问(尽管URL参数很少用于相同的目的)。数据通常有一个滑动的过期时间(每次用户访问时更新),并且根据您的服务器/框架,数据要么存储在进程内(这意味着如果web服务器崩溃或重新启动,数据将丢失),要么存储在外部状态服务器或数据库中。在使用Web场(一个给定的网站有多个服务器)时,这也是必要的。

由于会话数据完全由您的应用程序(服务器端)控制,因此它是任何敏感或安全性质的东西的最佳位置。

服务器端数据的明显缺点是可伸缩性--在会话期间,每个用户都需要服务器资源,客户端需要的任何数据都必须随每个请求一起发送。由于服务器无法知道用户是否导航到另一个站点或关闭浏览器,会话数据必须在给定时间后过期,以避免放弃的会话占用所有服务器资源。因此,在使用会话数据时,您应该注意数据过期和丢失的可能性,尤其是在具有长表单的页上。如果用户删除他们的cookie或切换浏览器/设备,它也会丢失。

有关客户机存储技术的进一步阅读,请参见深入研究HTML5。

 类似资料:
  • 问题内容: localStorage,sessionStorage,session和cookie的技术优缺点是什么,何时可以在另一个之上使用? 问题答案: 这是一个范围极为广泛的问题,很多利弊都取决于具体情况。 在所有情况下,这些存储机制都将特定于单个计算机/设备上的单个浏览器。跨会话持续存储数据的任何要求都将涉及您的应用服务器端- 最有可能使用数据库,但可能使用XML或文本/ CSV文件。 lo

  • 本文向大家介绍Cookie和session的区别,localstorage和sessionstorage的区别相关面试题,主要包含被问及Cookie和session的区别,localstorage和sessionstorage的区别时的应答技巧和注意事项,需要的朋友参考一下 参考回答: Cookie和session都可用来存储用户信息,cookie存放于客户端,session存放于服务器端,因为c

  • 本文向大家介绍Cookie、sessionStorage、localStorage的区别?相关面试题,主要包含被问及Cookie、sessionStorage、localStorage的区别?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 共同点:都是保存在浏览器端,并且是同源的 Cookie:cookie数据始终在同源的http请求中携带(即使不需要),即cookie在浏览器和服务器间来

  • 问题内容: 我想在不同节点上的2个应用程序之间共享会话;但是,我很困惑Cookie和Redis会话存储之间的区别是什么;例如Cookie会话可能如下所示: 在Redis中,一个会话存储可能看起来像这样: 但是,我很困惑如何共享这些会话。在cookie方法中,请求包含会话的状态,而我看不到Redis中的会话实际上如何匹配到2个应用程序之间的状态。有什么建议如何在2个机架应用程序之间使用Redis /

  • 我在一个应用程序中工作,在用户登录期间,我需要保存一些数据,我有一个问题,localStorage、sessionStorage、cookie之间有什么区别???

  • Web 存储对象 localStorage 和 sessionStorage 允许我们在浏览器上保存键/值对。 它们有趣的是,在页面刷新后(对于 sessionStorage)甚至浏览器完全重启(对于 localStorage)后,数据仍然保留在浏览器中。我们很快就会看到。 我们已经有了 cookie。为什么还要其他存储对象呢? 与 cookie 不同,Web 存储对象不会随每个请求被发送到服务器