sessionStorage 和 localStorage 是HTML5 Web Storage API 提供的,可以方便的在web请求之间保存数据。有了本地数据,就可以避免数据在浏览器和服务器间不必要地来回传递。
sessionStorage、localStorage、cookie都是在浏览器端存储的数据,
其中sessionStorage的概念很特别,引入了一个“浏览器窗口”的概念。
sessionStorage是在同源的同窗口(或tab)中,始终存在的数据。也就是说只
要这个浏览器窗口没有关闭,即使刷新页面或进入同源另一页面,数据仍然存在。关闭窗口后,sessionStorage即被销毁。
同时“独立”打开的不同窗口,即使是同一页面,sessionStorage对象也是不同的。
Web Storage带来的好处:
减少网络流量:一旦数据保存在本地后,就可以避免再向服务器请求数据,因此减少不必要的数据请求,减少数据在浏览器和服务器间不必要地来回传递。
快速显示数据:性能好,从本地读数据比通过网络从服务器获得数据快得多,本地数据可以即时获得。再加上网页本身也可以有缓存,因此整个页面和数据都在本地的话,可以立即显示。
临时存储:很多时候数据只需要在用户浏览一组页面期间使用,关闭窗口后数据就可以丢弃了,这种情况使用sessionStorage非常方便。
浏览器本地存储与服务器端存储之间的区别
其实数据既可以在浏览器本地存储,也可以在服务器端存储。浏览器端可以保存一些数据,
需要的时候直接从本地获取,sessionStorage、localStorage和cookie都由浏览器存储在本地的数据。
服务器端也可以保存所有用户的所有数据,但需要的时候浏览器要向服务器请求数据。
1.服务器端可以保存用户的持久数据,如数据库和云存储将用户的大量数据保存在服务器端。
2.服务器端也可以保存用户的临时会话数据。服务器端的session机制,如jsp的 session 对象,数据保存在服务器上。
sessionStorage 、localStorage 和 cookie 之间的区别
共同点:都是保存在浏览器端,且同源的。
区别:cookie数据始终在同源的http请求中携带(即使不需要),即cookie在浏览器和服务器间来回传递。
而sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。cookie数据还有路径(path)的概念,可以限制cookie只属于某个路径下。
存储大小限制也不同,
cookie数据不能超过4k,同时因为每次http请求都会携带cookie,所以cookie只适合保存很小的数据,如会话标识。
sessionStorage和localStorage 虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大。
cookie只在设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭。
作用域不同,sessionStorage不在不同的浏览器窗口中共享,即使是同一个页面;
localStorage 在所有同源窗口中都是共享的;
cookie也是在所有同源窗口中都是共享的。
- 同源的判断规则:
http://www.test.com
https://www.test.com (不同源,因为协议不同)
http://my.test.com(不同源,因为主机名不同)
http://www.test.com:8080(不同源,因为端口不同)
使用HTML5 Web存储的localStorage和sessionStorage方式进行Web页面数据本地存储。
页面参考如下图,能将页面上的数据进行本地存储。并能读取存储的数据显示在页面上。
localStorage(本地存储),可以长期存储数据,没有时间限制,一天,一年,两年甚至更长,数据都可以使用。
sessionStorage(会话存储),只有在浏览器被关闭之前使用,创建另一个页面时同意可以使用,关闭浏览器之后数据就会消失。
某个博主的测试localStorage兼容情况,如下:
Chrome4+ 开始支持localStorage
Firefox3.5+开始支持localStorage
Firefox1.5+支持globalStorage
IE8+支持localStorage
IE7兼容模式支持localStorage
IE5.5+支持userdata
Safari 4+ 支持localStorage
Opera10.5+支持localStorage
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <style type="text/css"> textarea { width: 300px; height: 300px; } .button { width: 100px; } </style> </head> <body > <script type="text/javascript"> //使用HTML5 Web存储的localStorage和sessionStorage方式进行Web页面数据本地存储。 //页面参考如下图,能将页面上的数据进行本地存储。并能读取存储的数据显示在页面上。 var t1; var t2; var oStorage; var oStorage; function init() {//初始化t1,t2 t1 = document.getElementById("t1"); t2 = document.getElementById("t2"); sStorage = window.sessionStorage; lStorage = window.localStorage } function saveSession() { sStorage.mydata = t2.value; t1.value += "sessionStorage保存mydata:" + t2.value + "\n"; } function readSession() { t1.value += "sessionStorage读取mydata:" + sStorage.mydata + "\n"; } function cleanSession() { t1.value += "sessionStorage清除mydata:" + sStorage.mydata + "\n"; sStorage.removeItem("mydata"); } function saveStorage() { lStorage.mydata = t2.value; t1.value += "localStorage保存mydata:" + t2.value + "\n"; } function readStorage() { t1.value += "localStorage读取mydata:" + lStorage.mydata + "\n"; } function cleanStorage() { t1.value += "localStorage清除mydata:" + lStorage.mydata + "\n"; lStorage.removeItem("mydata"); } </script> <div> <textarea id="t1"></textarea><br /> <label>需要保存的数据: </label> <input type="text" id="t2" /><br /> <input type="button" class="button" onclick="saveSession()" name="b1" value="session保存" /> <input type="button" class="button" onclick="readSession()" value="session读取" /> <input type="button" class="button" onclick="cleanSession()" value="session清除" /><br /> <input type="button" class="button" onclick="saveStorage()" value="local保存" /> <input type="button" class="button" onclick="readStorage()" value="local读取" /> <input type="button" class="button" onclick="cleanStorage()" value="local清除" /> </div> </body> </html>
例子
<!DOCTYPE HTML>
<html>
<body>
<script type="text/javascript">
var storage = window.localStorage;
if(storage){
storage.clear();
alert(‘支持‘);
storage.setItem(‘name‘,‘123‘);
//storage.setItem(‘name‘,‘请问‘); 这里会覆盖上面的123
document.write("缓存里面的名字: " + storage.getItem(‘name‘));
}else{
alert(‘不支持‘);
}
</script>
</body>
</html>
<html>
<script type="text/javascript">
document.write("另一个页面缓存里面的名字: " + window.localStorage.getItem(‘name‘));
</script>
</html>