cookie
客户端向服务器发送请求,服务器如果需要记住客户端信息,就会生成一个cookie,cookie里面是key-value形式的数据,存储着信息,然后将cookie返回给客户端,并返回一个set-cookie的字段,客户端收到消息后就会将cookie保存起来,然后每次访问的时候都会带着cookie
session
session就是会话的意思,比如在当我们想要把某个商品加到我们的购物车中,服务器需要知道我们是谁,A不能把商品加到B的购物车里面,这就需要session来区分了。服务器给每一个用户都生成一个sessionId,并把这个sessionId返回给客户端,然后在服务器中将sessionId跟用户信息以key-value的形式保存起来,客户端访问的时候就会带着sessionId,然后服务器就会根据客户端携带的sessionId再查询出相应的信息。
token
现在都是高并发,大多情况下一台服务器已经不能满足业务的需求了,可能会有多台服务器,比如现在A服务器跟B服务器构成了一个集群,当使用session时,如果某个客户是在A服务器上生成的sessionId,那该用户的信息就会保存在A服务器上,如果某次访问时该客户被负载均衡到B服务器上,那B服务器上并没有保存该用户的信息,这就会产生问题。所以就产生了token,token并不会在服务器上保存用户信息,而是会对客户端携带的信息加密来生成token,然后将加密后的token返回给客户端,客户端会将token保存起来,之每次访问的时候都会带着token,服务器会对token进行解密,检验是否正确。
总结
- cookie是将信息保存在客户端,由于是保存在客户端很容易被窃取,不安全,而且cookie的大小和数量也都有限制,大小一般不超过4k,同一个站点的cookie数量一般不超过20个
- session是将信息保存在服务器,由于服务器需要保存每个用户的信息,所以会对服务器内存产生压力,而且session也不能实现跨域
- token是将信息保存在客户端,减轻了服务器内存的压力,而且支持跨域