前端⾯试题(四):cookie,session和localstorage的区别
⼀、cookie详解
(1)简介
因为HTTP协议是⽆状态的,即服务器不知道⽤户上⼀次做了什么,这严重阻碍了交互式Web应⽤程序的实现。在典型的⽹上购物场景中,⽤户浏览了⼏个页⾯,买了⼀盒饼⼲和两饮料。最后结帐时,由于HTTP的⽆状态性,不通过额外的⼿段,服务器并不知道⽤户到底买了什么。为了做到这点,就需要使⽤到Cookie了。服务器可以设置或读取Cookies中包含信息,借此维护⽤户跟服务器会话中的状态。
Cookie(复数形态:Cookies),是指某些⽹站为了辨别⽤户⾝份、进⾏session跟踪⽽储存在⽤户本地终端上的数据(通常经过加密)。
Cookie是由服务端⽣成的,发送给客户端(通常是浏览器)的。Cookie总是保存在客户端中,按在客户端中的存储位置,可分为会话Cookie和持久Cookie:
内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短暂的。
硬盘Cookie保存在硬盘⾥,有⼀个过期时间,除⾮⽤户⼿⼯清理或到了过期时间,硬盘Cookie不会被删除,其存在时间是长期的。所以,按存在时间,可分为⾮持久Cookie和持久Cookie。
session如何设置和读取(2)作⽤
Cookie的根本作⽤就是在客户端存储⽤户访问⽹站的⼀些信息。典型的应⽤有:
记住密码,下次⾃动登录。
购物车功能。
记录⽤户浏览数据,进⾏商品(⼴告)推荐。
(3)缺陷
①Cookie会被附加在每个HTTP请求中,所以⽆形中增加了流量。
②由于在HTTP请求中的Cookie是明⽂传递的,所以安全性成问题。(除⾮⽤HTTPS)
③Cookie的⼤⼩限制在4KB左右。对于复杂的存储需求来说是不够⽤的。
⼆、Session详解
(1)简介
Session代表服务器与浏览器的⼀次会话过程,这个过程是连续的,也可以时断时续的。Session是⼀种服务器端的机制,Session 对象⽤来存储特定⽤户会话所需的信息。
Session由服务端⽣成,保存在服务器的内存、缓存、硬盘或数据库中。
(2)⼯作原理
当⽤户访问到⼀个服务器,如果服务器启⽤Session,服务器就要为该⽤户创建⼀个SESSION,在创建这个SESSION的时候,服务器⾸先检查这个⽤户发来的请求⾥是否包含了⼀个SESSION ID,如果包含了⼀个SESSION ID则说明之前该⽤户已经登陆过并为此⽤户创建过SESSION,那服务器就按照这个SESSION ID把这个SESSION在服务器的内存中查出来(如果查不到,就有可能为他新创建⼀个),如果客户端请求⾥不包含有SESSION ID,则为该客户端创建⼀个SESSION并⽣成⼀个与此SESSION相关的SESSION ID。这个SESSION ID是唯⼀的、不重复的、不容易到规律的字符串,这个SESSION ID将被在本次响应中返回到客户端保存,⽽保存这个SESSION ID的正是COOKIE,这样在交互过程中浏览器可以⾃动的按照规则把这个标识发送给服务器。
(3)作⽤
Session的根本作⽤就是在服务端存储⽤户和服务器会话的⼀些信息。典型的应⽤有:
判断⽤户是否登录。
购物车功能。
三、Cookie和Session的区别
1、存放位置不同:
Cookie保存在客户端,Session保存在服务端。
2 、存取⽅式的不同:
Cookie中保存的是字符串,Session保存的是对象
3、安全性(隐私策略)的不同 :
Cookie存储在浏览器中,对客户端是可见的,客户端的⼀些程序可能会窥探、复制以⾄修正Cookie中的内容。⽽Session存储在服务器上,对客户端是透明的,不存在敏感信息泄露的风险。 假如选⽤Cookie,⽐较好的⽅法是,敏感的信息如账号密码等尽量不要写到Cookie 中。最好是像Google、Baidu那样将Cookie信息加密,提交到服务器后再进⾏解密,保证Cookie中的信息只要本⼈能读得懂。⽽假如选择Session就省事多了,反正是放在服务器上,Session⾥任何隐私都能够有效的保护。
4、有效期上的不同:
只需要设置Cookie的过期时间属性为⼀个很⼤很⼤的数字,Cookie就可以在浏览器保存很长时间。
由于Session依赖于名为JSESSIONID的Cookie,⽽Cookie JSESSIONID的过期时间默许为–1,只需关闭了浏览器(⼀次会话结束),该Session就会失效。
5、对服务器造成的压⼒不同 :
Cookie保管在客户端,不占⽤服务器资源。假如并发阅读的⽤户⼗分多,Cookie是很好的选择。
Session是保管在服务器端的,每个⽤户都会产⽣⼀个Session。假如并发访问的⽤户⼗分多,会产⽣⼗分多的Session,耗费⼤量的内存。
6、 跨域⽀持上的不同 :
Cookie⽀持跨域名访问,例如将domain属性设置为“.baidu”,则以“.baidu”为后缀的⼀切域名均能够访问该Cookie。跨域名Cookie如今被普遍⽤在⽹络中。⽽Session则不会⽀持跨域名访问。Session仅在他所在的域名内有效。
以上整理于:
四、localStorage
webstorage是HTML5新出的标签,是本地存储的解决⽅案之⼀,有sessionStorage与localStorage两种。
在HTML5中,新加⼊了⼀个localStorage特性,这个特性主要是⽤来作为本地存储来使⽤的,解决了cookie存储空间不⾜的问题(cookie 中每条cookie的存储空间为4k),localStorage中⼀般浏览器⽀持的是5M⼤⼩,这个在不同的浏览器中localStorage会有所不同。
webstorage拥有封装好的⽅法,如setItem, getItem, removeItem,clear等。不像cookie那样需要程序猿⼿动封装。cookie的作⽤是与服务器进⾏交互,作为http规范的⼀部分存在为webstorage。⽽webstorage仅仅是为了在本地存储数据⽽⽣,它们都保存在客户端浏览器。
cookie,localStorage, sessionStorage三者区别
cookie始终在同源的http请求中携带,即使不需要,cookie在浏览器和服务器中来回传递。⽽localStorage和sessionStora仅仅在本地存储,不会好服务器通信,也不会⾃动把数据发送给服务器。
存储⼤⼩不同,cookie为4kb左右;localStorage, sessionStorage可以达到5M
数据有效期不同,sessionStorage仅在同源窗⼝中有效,关闭窗⼝就消失了,cookie可以设置过期时间,localStorage长期有效localStorage, sessionStorage有现成的API, cookie需要程序员⼿动封装

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。