[英]HTML5 Local storage vs. Session storage
除了非持久性和仅限于当前窗口之外,会话存储相对于本地存储是否有任何好处(性能、数据访问等)?
localStorage和sessionStorage都扩展了Storage 。 除了sessionStorage
的预期“非持久性”之外,它们之间没有区别。
也就是说,存储在localStorage
的数据一直存在,直到显式删除。 所做的更改将被保存并可供所有当前和将来访问该站点时使用。
对于sessionStorage
,更改仅适用于每个选项卡。 所做的更改将被保存并可用于该选项卡中的当前页面,直到它关闭。 一旦关闭,存储的数据将被删除。
唯一的区别是 localStorage 有不同的到期时间, sessionStorage
只能在创建它的窗口打开时访问。
localStorage
一直持续到您删除它或用户删除它为止。
假设您想保存登录用户名和密码,出于安全原因,您希望在localStorage
上使用sessionStorage
(即,稍后另一个人访问他们的帐户)。
但是如果你想在他们的机器上保存用户的设置,你可能需要localStorage
。 总而言之:
localStorage
- 用于长期使用。
sessionStorage
- 当您需要存储更改或临时存储的东西时使用
可能有助于理解本地和会话存储之间差异的其他几点
本地存储和会话存储都限于文档来源,因此
https://mydomain.com/
http://mydomain.com/
https://mydomain.com:8080/
以上所有 URL不会共享相同的存储。 (注意网页路径不影响网页存储)
即使在不同标签页中打开具有同源策略的文档,会话存储也是不同的,因此在两个不同标签页中打开的同一个网页不能共享同一个会话存储。
本地和会话存储也受浏览器供应商的限制。 所以IE保存的存储数据不能被Chrome或FF读取。
希望这可以帮助。
localStorage
和sessionStorage
之间的主要区别在于sessionStorage
每个选项卡都是唯一的。 如果您关闭sessionStorage
将被删除的选项卡, localStorage
不会。 您也无法在选项卡之间进行通信:)
另一个细微的区别是,例如在 Safari (8.0.3) 上, localStorage
的限制为 2551 k 个字符,但sessionStorage
存储空间不受限制
在 Chrome (v43) 上, localStorage
和sessionStorage
都被限制为 5101 k 个字符(正常/隐身模式之间没有区别)
在 Firefox 上localStorage
和sessionStorage
都被限制为 5120 k 个字符(正常/私有模式之间没有区别)
速度没有任何区别:)
Mobile Safari 和 Mobile Chrome 也有问题,Private Mode Safari & Chrome 的最大空间为 0KB
sessionStorage
与localStorage
相同,不同之处在于它只存储一个会话的数据,当用户关闭创建它的浏览器窗口时,它将被删除。
性能方面,我的(粗略)测量发现 1000 次写入和读取没有差异
安全明智,直觉上似乎 localStore 可能在 sessionStore 之前关闭,但没有具体证据 - 也许其他人这样做了?
功能明智,同意上面的digitalFresh
会话存储和本地存储在行为上是相同的,除了本地存储将存储数据直到并且除非用户删除缓存和 cookie 和会话存储数据将保留在系统中,直到我们关闭会话,即直到我们关闭会话存储创建窗口。
在我看来,会话存储相对于本地存储的优势在于它在 Firefox 中具有无限容量,并且持续时间不会超过会话。 (当然这取决于你的目标是什么。)
sessionStorage
为每个给定的源维护一个单独的存储区域,在页面会话期间可用(只要浏览器打开,包括页面重新加载和恢复)
localStorage
做同样的事情,但即使在浏览器关闭并重新打开时仍然存在。
我从Web Storage API
了这个
本地存储:保存用户信息数据,无过期日期,用户关闭浏览器窗口时不会删除该数据,日、周、月、年均可使用。
//Set the value in a local storage object
localStorage.setItem('name', myName);
//Get the value from storage object
localStorage.getItem('name');
//Delete the value from local storage object
localStorage.removeItem(name);//Delete specifice obeject from local storege
localStorage.clear();//Delete all from local storege
会话存储:它与本地存储日期相同,但它会在网络用户关闭浏览器窗口时删除所有窗口。
//set the value to a object in session storege
sessionStorage.myNameInSession = "Krishna";
阅读更多点击
迟到的答案,但觉得在这里补充几点。
会话存储可用于特定选项卡,因为我们可以在浏览器中使用本地存储。 两者默认为同源,我们也可以使用键值对手动存储值(值必须是字符串)。
关闭浏览器的选项卡(会话)后,该选项卡上的会话存储将被清除,在本地存储的情况下,我们需要明确清除它。 最大存储限制分别为5MB
和10MB
。
我们可以像下面这样保存和检索数据,
保存:
sessionStorage.setItem('id', noOfClicks); // localStorage.setItem('id', noOfClicks);
sessionStorage.setItem('userDetails', JSON.stringify(userDetails)); // if it's object
要得到:
sessionStorage.getItem('id'); // localStorage.getItem('id');
User user = JSON.parse(sessionStorage.getItem("userDetails")) as User; // if it's object
修改:
sessionStorage.removeItem('id'); // localStorage.removeItem('id');
sessionStorage.clear(); // localStorage.clear();
PS: getItem()
也将数据作为字符串返回,如果它是对象,我们需要将其转换为JSON 格式才能访问。
您可以在此处阅读有关浏览器存储的更多信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.