经常忘记Cookie、Session和Token,那么今天就来记录一下它们,聊一聊。
1.Cookie、Session和Token是什么?
Cookie:是存放在客户端(浏览器)来自于服务端的用于校验身份的信息。
Session:是存放在服务端(服务器)用于校验身份的会话信息。
Token(APP移动端常用):是存放在本地的来自于服务端的校验身份的信息,服务端也存放有相同的一份信息。
2.有什么作用?
HTTP是无状态,无连接的,通俗的来说就是HTTP不知道你之前做过什么,之后想要做什么,只知道你当前想要做什么。是用来做持久化的。
小插曲(讲个场景,哦不,故事,不用Cookie,Session的故事):无状态很麻烦,不知道用户之前做了什么,也就是不能保存之前的一些状态,这样每次都要做重复的操作,比如说登录某宝,如果不用Session和Cookie,当你登录网站,选择好商品准备剁手,点击确认付款的时候,尼玛,我不是登录过了吗?怎么还要重新登录???正常,因为你点击付款的时候会再次判断你是否已经登录,如果你没有登录肯定会要让你登录,因为你之前没用Cookie或者Session保存登录状态 ,所以不知道你之前登录过了,因此为了知道用户之前做过什么,引入了Cookie,Session和Token。
Cookie:客户端会通过服务端设置的一个“Set-Cookie”字段来保存Cookie,服务端“Set-Cookie”的时候会记录是向谁发送的Cookie,下次请求的时候客户端会自动携带Cookie到服务端,服务端收到Cookie之后会验证是从哪个客户端过来的,然后对比之前的记录来得到之前的状态信息。Cookie过期时客户端会将其自动清除,如果Cookie没有过期,客户端向服务端发起请求都会携带Cookie会话信息到服务端的。服务端根据Cookie判断用户信息是否合法,请求是否过期等等一系列校验。
Session:客户端在访问服务端时,服务端会生成Session(会话信息)保存在服务端,当客户端在没有结束本次会话时Session会一直保持,没有结束本次会话的时候如果客户端再次向服务端发起请求,用于校验身份的信息就不在向Cookie那样携带过去给服务器了,服务器那边有Session可以校验。当会话结束,Session会被清除。
Token(App):用于校验用户身份是否合法,会话是否过期。
Tooken的生成和校验过程(移动端开发的童鞋注意了,划重点了)。
1.客户端向服务端发起请求,申请Tooken。
2.服务端收到客户端发起的登录请求之后先校验用户信息是否合法,身份合法合法之后分配一个Token给客户端,同时在服务端也存放一份一样的Token(一般用数据库存储),token有时效性,每次登录都会分配一个,同时更新数据库里存储的token,在用户退出的时候把token置为过期,或者在规定的时间置为过期,token过期之后需要重新登录,然后重新分配token,保证了安全性。
3.客户端在收到服务端响应得到的Token之后保存在本地,每次请求的时候都会携带Token到服务端。
4.服务端在收到客户端的请求的时候会判断Token是否过期,根据是否过期和身份是否合法来判断是否给予相应的资源或响应。
简单来说:Cookie、Session和Token的作用就是用来鉴定用户身份是否合法(用户是否登录)和会话是否过期(登录是过期)的,只不过存放的位置不一样而已,Cookie存放在本地客户端,Session存放在服务端, Token存放在本地客户端和服务端。
3.优缺点
Cookie存放在本地,所以安全性不高,但是由于是存放在本地,不是存放在服务端,服务端的压力会小一些。
Session是存放在服务端,所以安全性相对高一些,但是由于是存放在服务端,每个用户登录都会有一个Session存放在服务端,同时登录的人多了,服务端压力也就大了。
Token主要是在App移动端使用,相对安全,但是也会给服务器带来相应的压力。
网友评论