关于cookie,session和token

一.理解HTTP“无状态”的含义html

  咱们知道,HTTP是一种无状态的协议,客户端与服务器创建链接并传输数据,数据传输完成后,链接就会关闭。redis

  举个栗子,若是在无状态状况下访问淘宝,会出现如下场景:数据库

  1)打开淘宝的url,在这一步输入用户名和密码;后端

  2)在首页选择同样商品,点击进去,又提示须要从新登陆。由于HTTP是无状态的,虽然在第1步中已经输入了用户名和密码,但咱们的客户端不会记住上一步输入的用户名和密码,而服务器也不会记住已登陆的状态;浏览器

  通过上述例子,咱们能够把“无状态”理解为:不会对本次会话设置缓存区,来分别记录客户端和服务器在临时会话中产生的数据缓存

  理解了HTTP无状态的含义,再去看cookie,session和token的概念。安全

二.cookie的概念 服务器

  cookie是HTTP定义在header中的一个字段,是具体存在于浏览器上的,仅仅是浏览器实现的一种数据存储功能。它是session的一种后端无状态实现。cookie

  cookie由服务器生成,发送给客户端的,客户端把cookie以kv形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该cookie发送给服务器。因为cookie是存在客户端上的,因此浏览器加入了一些限制确保cookie不会被恶意使用,同时不会占据太多磁盘空间,因此每一个域的cookie数量是有限的。网络

3、session

  Session在广义上是指一种网络通信的会话机制,用于跟踪用户;在狭义上,Session是在服务器端保存的一个数据结构,用来跟踪用户的状态,这个数据能够保存在集群、数据库、文件中:

  

  1)客户端第一次请求服务器;

  2)第一次建立session时,服务器在内存中开辟一块空间,并返回Session ID;

  3)由于服务器须要记录用户状态,故在响应信息中包含一个SetCookie的响应头,要求客户端在Cookie中记录Seesion ID;

  4)客户端根据SetCookie中的响应头信息,将sessionID存储在Cookie中;

  5)再次请求服务器,客户端会在请求头信息中携带Cookie请求头;

  6)服务器根据客户端携带的请求头进行用户身份、状态等较验。

  由上图中的步骤能够得知,从广义上讲,session是一种网络通信的会话机制,用于跟踪用户。而cookie在这个过程当中的做用是用于保存Session ID的。cookie只是目前用于实现session机制的主流方案之一。

4、token

  token是存储在客户端的令牌,通常用于身份校验。

   

 

  值得一提的是,在上述步骤②生成token时会加入有效期,而在步骤⑥解析token时,也会去判断token是否过时。

  步骤④存储token时,能够存储在cookie或者redis中。

  步骤⑤携带token时,能够在url中携带,也能够在post请求或http的header中携带。

5、session和token的区别

   1)token和session都用于身份验证,session是会话,token是令牌;

  2)身份认证 token的安全性要高于session,由于每一个请求都有签名还能防止监听以及重放攻击,而session必须靠链路层来保障通信安全。

  3)session和token都须要去管理过时时间。

 

HTTP“无状态”的解释:http://www.javashuo.com/article/p-wzffznna-hb.html

cookie,session,token的概念:https://blog.csdn.net/lcgoing/article/details/86754955

https://www.zhihu.com/question/19786827/answer/28752144

相关文章
相关标签/搜索