1.Cookie和Session
Cookie是保存在用户客户端的小型文本文件,里面记录了用户唯一的ID用以区分不同的用户。Cookie的出现主要是针对HTTP协议的无状态性,HTTP协议不会记录之前的信息,完成一次请求和响应之后就会释放连接,也就是说你登录之后做任何操作都要重新输入用户名和密码。所以Cookie应运而生,当客户端首次向服务器发起请求时,服务端会返回一个sessionId存储在Cookie中返回给客户端,下次客户端请求就会将这个Cookie放在请求头中向服务器发起请求并根据其中的sessionId查找服务器的session区,session区中记录了像用户名之类的能区分出是你的信息,然后你就可以进行后续操作不用再写账号密码了。
没有Cookie和Session是这样的
当你进入一个系统首先需要登录,登录就得发一个HTTP请求,然后服务器端返回响应,由于HTTP协议是无状态连接所以一次请求响应结束后就会释放TCP连接。当我下次点击任意一个导航栏想执行操作的时候,由于服务器不知道这个谁做的,所以肯定不会完成正确的响应,所以我们需要在HTTP请求的请求头上带上用户名和密码,不仅这次操作要带以后每次操作都要带上,否则服务器不知道是谁访问的。
为了解决这个问题Cookie和Session闪亮登场
当首次向服务器端发起请求时,服务器端session就会记录一下这个用户的信息,然后将这些信息存到Session中将SessionID放在Cookie中返回给客户端,下次客户端带着Cookie通过sessionID到session区中查找就能知道这个用户的身份就不用输入账号密码了。
比如对于这样一个登录框
初次登录之后会在一个响应头中返回set-Cookie放在客户端保存。当我再去执行其他操作的时候我会在请求头中带上这个Cookie。
2.Cookie和Session的区别
1.存放位置不同,Cookie存放在客户端或本地磁盘中,Session存放在服务器端是放在内存里,宕机之后会消失。
比如Chrome浏览器会将Cookie放在这里C:\Users\MICROSOFT\AppData\Local\Google\Chrome\User Data\Default\Cache
这些都是放在磁盘的Cookie
2.Cookie所有的数据都会保存在客户端,所以这些数据都会被访问到,甚至可以修改,所以Cookie不适合保存重要的数据。而session将数据保存在服务器端,访问是通过Cookie传入的sessionID来访问,所以Session更适合存储一些重要数据。
3.Cookie一般可以长期保存在客户端,直到过期失效,Session生命周期一般就是浏览器会话期间,会话结束Session也销毁。
3.Token
Token和Cookie,Session相似,Token能干的Cookie,Session也能干那为啥还要用他呢?因为Cookie和Session有一个缺陷就是他们不能跨域,也就是说你访问www.baidu.com那就有一个baiduCookie,访问www.bilibili.com那就有一个B站的Cookie你想拿百度的Cookie去访问B站是访问不了的。我为啥要用百度的Cookie去访问B站呢,确实没有这个需求。但是目前比较火的微服务项目中,一个大型服务可能被拆分成好几个小型服务这些服务之间的访问是跨域的。
如果你没有token这个东西的话,你登录后无法进行发短信服务,邮件服务因为这些服务之间是跨域的,如果想访问这些服务的话那就得重新登录进行身份验证。这样的话Cookie和Session就失效了。token就是为了解决这个问题,登录之后服务器向客户端返回一个token,下次再访问其他的服务时我带着这个token就能证明我的身份了。