一、Http是无状态协议
要解释cookie和session的区别就要先引入Http协议。首先Http是一个无状态协议,也就是说每一次之间的请求是没有任何联系的。无状态的好处是速度快,但是在我们要进行用户状态持续在线的话不行了。为了解决这个问题我们就引入了cookie和session技术。
二、Cookie和session的原理
不管是Cookie还是Session都是为了跟踪浏览器用户身份的会话方式。
1.Cookie的原理:
Cookie的 首先要知道Cookie是用来存储在客户端浏览器中的一种文本文件。
cookie实现的过程中有三点很重要:
- 在Http响应上加了 set-Cookie:表示的就是有一个用户信息要进行保存,服务端会返回响应的头(set-Cookie : 用户信息),保存的地方是客户端浏览器。
- 在客户端浏览器进行保存刚的用户信息:服务端中的set-Cookie的响应头的存储形式是键值对来存储的。将set-Cookie作为键,值就是用户的信息,服务端告诉客户端有用户信息要进行保存,客户端在接收后就直接根据键来吧用户信息保存在客户端浏览器中。
- 往后的每一次请求(相同域名)时,浏览器都会自动的携带刚保存的用户信息,这样就达到了保证用户在线的操作
Cookie的应用场景
上边解释用户首次登录后,会将用户的信息保留在浏览器中,用户下次再发起http请求的时候,就会自动的携带Cookie的用户信息。也就是不用多次进行登录。Cookie多用于同一台机器的免登录操作。
2.Session的原理
会话:
在打开一个客户端到关闭一个客户端之前,并且未超时这就是一次会话。
原理:
- 以用户登录为例:在进行首次登录的时候先要输入用户信息。在首次输入完用户信息后,服务端会自己保存一下用户的信息,并生成一个随机数(这个随机数和用户信息之间存在着某种映射关系)。
- 服务端如何保存用户的信息:服务端把上边生成的随机数返回给客户端。在进行下次操作的时候就不用再以用户信息的方式来进行操作,只需要看看客户端的这个随机数是否满足那种映射关系即可。
- 在以后的访问资源的操作:先看看有没有获取这个随机数,要是没有,表示这个用户不存在,不能访问。要是有随机数还要看看这个随机数是否能满足与服务端里边的映射关系。要是满足的话才能进行访问。
Cookie和Session的区别
- 存储用户信息的位置不同:Cookie保存用户信息的位置是客户端浏览器,Session保存用户信息的位置是服务端
- 安全性不同:Session保存用户信息的位置是服务端,它很难被修改,Cookie因为是保存在客户端,容易被截取和篡改,安全性不及Session。
- 还是基于Session保存信息在服务器上,要是访问量增多的时候,会消耗服务器的资源。Cookie则不会。
- 在保存重要信息的时候我们考虑用Session,其他不重要的信息时用Cookie。