cookie和session的区别
由于HTTP是一种无状态的协议,数据交换完毕后会关闭连接,为了分辨一个请求是谁发起的,以免在同一个网站每打开一个页面都需要重新登录,引入了Session和Cookie两个机制。
Cookie和Session都是用来跟踪浏览器用户身份的方式。
1、保持状态:
Cookie保存在浏览器端,Session保存在服务器端
2、使用方式:
(1)Cookie:
第一次登陆后,服务器会生成一个cookie,并通过set-cookie响应头将包含有cookie的数据传给浏览器,然后被浏览器保存在本地。当该用户发送第二次请求时,浏览器就会自动把上次存储的Cookie携带在请求中发送给服务器,服务器根据这个Cookie就可以判断是哪个用户进行的操作。
Cookie在生成时就会被指定一个Expire值,这就是Cookie的生存周期,在这个周期内Cookie有效,超出周期Cookie就会被清除。有些页面将Cookie的生存周期设置为“0”或负值,这样在关闭浏览器时,就马上清除Cookie,不会记录用户信息,更加安全。
(2)Session:
有了Cookie来区分身份,还需要session来存储用户详细信息以供调用,因为这些信息是是隐私信息,直接把信息通过cookie发到并保存在客户端是很不安全的,且cookie大小不能超过4k,不支持中文。
当浏览器发起一个请求时,服务器会先检查是否携带了存有SessionID的cookie。如果有,那么就会从服务器的session里取出这个ID对应的session返回给浏览器。如果客户端请求中没有SessionID,服务器会创建新的session,并把SessionID返回给客户端。
如果用户禁用cookie,就需要将SessionID拼接到访问地址后。
3、存储内容:
cookie只能保存字符串类型,session通过类Hashtable的数据结构来保存,支持任何类型的对象(session中可含有多个对象)
4、存储大小:
cookie:单个cookie保存的数据不能超过4kb;session大小没有限制。
5、安全性:
session的安全性大于cookie。
原因如下:
(1)SessionID存储在cookie中,若要攻破session首先要攻破cookie;
(2)SessionID是要有人登录,或者启动session_start才会有,所以攻破cookie也不一定能得到SessionID;
(3)第二次启动session_start后,前一次的SessionID就是失效了,session过期后,SessionID也随之失效。
(4)SessionID是加密的
6、应用场景:
cookie:
(1)判断用户身份,以便下次登录时能够实现单点登录(或记住密码)。
(2)保存上次登录的时间等信息。
(3)保存上次查看的页面
session:
(1)网上商城中的购物车
(2)保存用户登录信息
(3)将某些数据放入session中,供同一用户的不同页面使用
(4)防止用户非法登录
7、缺点:
cookie:
(1)大小受限
(2)用户可以操作(禁用)cookie,使功能受限
(3)安全性较低
(4)有些状态不可能保存在客户端。
(5)每次访问都要传送cookie给服务器,浪费带宽。
(6)cookie数据有路径(path)的概念,可以限制cookie只属于某个路径下。
session:
(1)Session保存的东西越多,就越占用服务器内存,对于用户在线人数较多的网站,服务器的内存压力会比较大。
(2)依赖于cookie(sessionID保存在cookie),如果禁用cookie,则要使用URL重写,不安全
(3)创建Session变量有很大的随意性,可随时调用,不需要开发者做精确地处理,所以,过度使用session变量将会导致代码不可读而且不好维护。
localStorage和sessionStorage的区别
HTML5提供了WebStorage API ,包括sessionStorage 和 localStorage ,可以方便的在web请求之间保存数据。克服了cookie带来的一些限制。
有了本地数据,就可以避免数据在浏览器和服务器间不必要地来回传递。
1、生命周期:
localStorage的生命周期是永久的,关闭页面或浏览器之后localStorage中的数据也不会消失,除非主动删除数据。
sessionStorage的生命周期是在仅在当前会话下有效,关闭了浏览器窗口后就会被销毁。
2、存储大小:
localStorage和sessionStorage的存储数据大小一般都是:5MB
3、存储位置:
localStorage和sessionStorage都保存在客户端,不与服务器进行交互通信。
4、存储内容类型:
localStorage和sessionStorage只能存储字符串类型,对于复杂的对象可以使用ECMAScript提供的JSON对象的stringify和parse来处理
5、获取方式:
localStorage:window.localStorage;
sessionStorage:window.sessionStorage;
6、应用场景:
localStoragese:存储用户的一些设置;记录浏览器对页面的访问次数;
sessionStorage:适合单页应用各业务模块之间传值;
WebStorage与cookie的区别
1、存储空间:
cookie为4KB
WebStorage是5MB
2、传输方式:
WebStorage不会传送到服务器,存储在本地的数据可以直接获取,所以不必担心被截取。
cookie在每次请求中都会传送到服务器,不管是否被需要。
3、过期时间:
cookie的过期时间由设置的Expire决定,到期就会销毁,如果这个值为0或负数,就是会话期间有效。
localStorage的生命周期是永久的,关闭页面或浏览器之后localStorage中的数据也不会消失,除非主动删除数据。
sessionStorage的生命周期是在仅在当前会话下有效,关闭了浏览器窗口后就会被销毁。
4、快速获取:
有的数据存储在WebStorage上,从本地获取会比从服务器端获取快得多。
5、操作性:
WebStorage提供了一些方法,数据操作比cookie方便;
setItem (key, value) //保存数据,以键值对的方式储存信息。
getItem (key) //获取数据,将键值传入,即可获取到对应的value值。
removeItem (key) //删除单个数据,根据键值移除对应的信息。
clear () //删除所有的数据
key (index) //获取某个索引的key