Cookie
http是无状态的——意味着服务器不知道每一次http请求时用户端的状态情况。
而Cookie的出现,便使得http可以有「状态」。
Cookie的原理大致如下:
- 客户端向服务器发送http请求
- 服务器响应请求,并且在响应标头中设定
Set-Cookie
响应头 - 客户端收到
Set-Coookie
并设置Cookie(需要指出,Cookie的存储形式是键值对,或者又叫字典) - 此后每次客户端发送http请求的时候都在请求头附上设置好的Cookie
大致如图
可以发现,Cookie即可以成为http的「状态」——根据不同的Cookie,服务器可以返回不同的网页内容。
Session
session是一个抽象的概念,它相当于服务器生成一个特别的「加密id」来记录会话,然后将加密id交给客户端,客户端在进行会话时使用这个加密id来证明「这个是之前进行的会话」。
Info
有点绕?可以看看下面这个类比现实的例子:
A:定个接头口号吧,只要下次你和我说「黄河」,我就知道是你。
B:好的。
这样子每次B和A接头的时候都和A说「黄河」,A都能知道是B,不论对方是以什么样子出现的都能认出来。
——有点像一个临时的密码,对吧?
在服务器上记录会话的好处是能够进行更方便的会话管理,比如说服务器主动删除会话,这样不管客户端的加密id是否过期都没办法继续会话。
缺点则是增加了服务器的负担。