localStorage、sessionStorage、session和cookie在技术上的优缺点是什么?我什么时候会使用其中一个而不是另一个?
这是一个范围极其广泛的问题,许多赞成/反对意见将与情况相关联。
在所有情况下,这些存储机制将特定于单个计算机/设备上的单个浏览器。任何跨会话持续存储数据的要求都需要涉及应用程序服务器端--最有可能使用数据库,但也可能使用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之间有什么区别???
问题内容: 在此示例中: 无法编译为: 而被编译器接受。 这个答案说明唯一的区别是,与不同,它允许您稍后引用类型,似乎并非如此。 是什么区别,并在这种情况下,为什么不第一编译? 问题答案: 通过使用以下签名定义方法: 并像这样调用它: 在jls§8.1.2中,我们发现(有趣的部分被我加粗了): 通用类声明定义了一组参数化类型(第4.5节), 每种可能通过类型arguments调用类型参数节的类型