除了非持久性和仅限于当前窗口的范围外,对本地存储的会话存储有任何好处(性能,数据访问等)吗?
答案 0 :(得分:693)
localStorage和sessionStorage都延伸Storage。除了sessionStorage
的预期“非持久性”之外,它们之间没有区别。
也就是说,localStorage
中存储的数据会一直存在,直到被明确删除。所做的更改将保存并可用于该网站的所有当前和未来访问。
对于sessionStorage
,更改仅适用于每个标签。所做的更改将保存并可用于该选项卡中的当前页面 ,直到关闭为止。关闭后,存储的数据将被删除。
答案 1 :(得分:147)
唯一的区别是localStorage具有不同的到期时间,sessionStorage
只能在创建它的窗口打开时才能访问。
localStorage
会一直持续到您删除它或用户删除它为止
假设您希望保存一个登录用户名和密码,出于安全原因(即稍后访问其帐户的其他人),您希望sessionStorage
使用localStorage
。
但是如果你想在他们的机器上保存用户的设置,你可能需要localStorage
。总而言之:
localStorage
- 用于长期使用。
sessionStorage
- 当您需要存储更改或暂时性的内容时使用
答案 2 :(得分:97)
可能有助于理解本地和会话存储之间差异的其他几点
本地存储和会话存储都限定为文档来源,因此
https://mydomain.com/
http://mydomain.com/
https://mydomain.com:8080/
上述所有网址 不 共享相同的存储空间。 (网页的通知路径不影响网络存储)
即使对于在不同标签中打开相同来源政策的文档,会话存储也是不同的,因此在两个不同的标签 无法 共享相同的网页会话存储。
本地和会话存储也由 浏览器供应商 确定范围。因此,Chrome或FF无法读取IE保存的存储数据。
希望这有帮助。
答案 3 :(得分:28)
The main difference between localStorage
and sessionStorage
is that sessionStorage
is unique per tab. If you close the tab the sessionStorage
gets deleted, localStorage
does not. Also you cannot communicate between tabs :)
Another subtle difference is that for example on Safari (8.0.3) localStorage
has a limit of 2551 k characters but sessionStorage
has unlimited storage
On Chrome (v43) both localStorage
and sessionStorage
are limited to 5101 k characters (no difference between normal / private mode)
On Firefox both localStorage
and sessionStorage
are limited to 5120 k characters (no difference between normal / incognito mode)
No difference in speed whatsoever :)
There's also a problem with Mobile Safari and Mobile Chrome, Private Mode Safari & Chrome have a maximum space of 0KB
答案 4 :(得分:10)
性能方面,我的(粗略)测量结果发现1000次写入和读取没有区别
安全性明智,直观地认为localStore可能会在sessionStore之前关闭,但没有具体证据 - 也许其他人会这样做?
功能明智,与上面的digitalFresh一致
答案 5 :(得分:10)
sessionStorage
与localStorage
相同,只是它只存储一个会话的数据,当用户关闭创建它的浏览器窗口时,它将被删除。
答案 6 :(得分:6)
Ya会话存储和本地存储的行为相同,只有一个本地存储将存储数据,除非用户删除缓存并且cookie和会话存储数据将保留在系统中,直到我们关闭会话i,e直到我们关闭会话存储创建窗口。
答案 7 :(得分:5)
在我看来,会话存储优于本地存储的优势在于它在Firefox中有unlimited capacity,并且不会持续比会话更长的时间。 (当然这取决于你的目标。)
答案 8 :(得分:1)
本地存储:它会一直存储用户信息数据而不会过期,当用户关闭浏览器窗口时,该数据将不会被删除。
本地存储: >//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";
了解更多Click
答案 9 :(得分:0)
sessionStorage
为每个给定的来源维护一个单独的存储区域,该区域在页面会话期间(只要浏览器处于打开状态,包括页面重新加载和还原)就可用。
localStorage
的作用相同,但是即使关闭并重新打开浏览器也仍然存在。
我从https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API
答案 10 :(得分:0)
回答晚了,但觉得在这里补充几点。
会话存储可用于特定选项卡,因为我们可以在整个浏览器中使用本地存储。两者默认为同源,我们也可以使用键值对手动存储值(值必须是字符串)。
一旦关闭浏览器的选项卡(会话),则该选项卡上的会话存储将被清除,而在本地存储的情况下,我们需要 明确清除。最大存储限制分别为 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格式< /em> 访问是否是对象。
您可以在此处阅读有关浏览器存储的更多信息..