描述cookies,sessionStorage和localStorage的区别

描述cookies,sessionStorage和localStorage的区别



三者都是在浏览器端存储数据。
1.数据存储大小限制不同。
cookies:数据始终在同源的http请求中携带,即cookie在服务器和浏览器间回传。故存储的数据大小最小,一般为4k。
sessionStorage:数据在本地保存,不会自动把数据发给服务器。所以一般5M或者更大。
localStorage:数据在本地保存,不会自动把数据发给服务器。所以一般5M或者更大。
2.数据有效期不同
cookies:数据在cookie设置的有效期之前都有效,即使窗口和浏览器关闭。
sessionStorage:数据在关闭浏览器窗口后自动清除。存储的数据仅在同源窗口内有效,即使在不同浏览器相同页面也是无效的。一般用于存储会话数据。
localStorage:始终有效,因此用作持久数据。
3.数据作用域不同
cookies:在所有同源窗口敏感词享。
sessionStorage:不在不同浏览器窗口敏感词享。
localStorage:在所有同源窗口敏感词享。

同源:
1995年,同源政策由 Netscape 公司引入浏览器。目前,所有浏览器都实行这个政策。
最初,它的含义是指,A网页设置的 Cookie,B网页不能打开,除非这两个网页"同源"。所谓"同源"指的是"三个相同"。
  • 协议相同
  • 域名相同
  • 端口相同
举例来说,http://www.example.com/dir/page.html这个网址,协议是http://,域名是www.example.com,端口是80(默认端口可以省略)。它的同源情况如下。
  • http://www.example.com/dir2/other.html:同源
  • http://example.com/dir/other.html:不同源(域名不同)
  • http://v2.www.example.com/dir/other.html:不同源(域名不同)
  • http://www.example.com:81/dir/other.html:不同源(端口不同)

同源政策的目的,是为了保证用户信息的安全,防止恶意的网站窃取数据。

设想这样一种情况:A网站是一家银行,用户登录以后,又去浏览其他网站。如果其他网站可以读取A网站的 Cookie,会发生什么?

很显然,如果 Cookie 包含隐私(比如存款总额),这些信息就会泄漏。更可怕的是,Cookie 往往用来保存用户的登录状态,如果用户没有退出登录,其他网站就可以冒充用户,为所欲为。因为浏览器同时还规定,提交表单不受同源政策的限制。

由此可见,"同源政策"是必需的,否则 Cookie 可以共享,互联网就毫无安全可言了。

1.3 限制范围

随着互联网的发展,"同源政策"越来越严格。目前,如果非同源,共有三种行为受到限制。

(1) Cookie、LocalStorage 和 IndexDB 无法读取。

(2) DOM 无法获得。

(3) AJAX 请求不能发送。

虽然这些限制是必要的,但是有时很不方便,合理的用途也受到影响,所以有时需要规避上面三种限制。