Cookie、Session、Token的区别

众所周知,咱们访问网页都是使用的http协议,而http协议的每一次访问都是无状态的。
也就是说这一次请求和上一次请求是没有任何关系的,互不认识的,没有关联的。这种无状态的的好处是快速,坏处就是没法把两次请求关联起来。web

Cookie、Session、Token就是用来作持久化处理的,目的就是让客户端和服务端互相认识,将两次请求关联起来。数据库

Cookie浏览器

  • Cookie是一个很是具体的东西,指的就是浏览器里面能永久存储的一种数据,仅仅是浏览器实现的一种数据存储功能。安全

  • Cookie由服务器生成,经过响应头Set-Cookie字段发送给浏览器,浏览器把Cookie以Key Value形式保存到某个目录下的文本文件里,下一次请求同一个网站时就会把Cookie发送给服务器。因为Cookie是存储在客户端上的,因此浏览器加入了一些限制确保Cookie不会被恶意使用,同时不会占据太多磁盘空间,因此每一个域的Cookie数量是有限的。服务器

  • Cookie在项目中的应用场景:session

    • 平常登陆一个网站,今天输入用户名密码登陆成功了,次日无须要从新输入用户名和密码。这个时候用到的一个机制就是Cookie。
    • 浏览器记录用户浏览过的网页。
  • 总结:负载均衡

    • Cookie由服务器生成,存储在客户端。工具

    • Cookie的数据格式为键值对,Cookie数据有失效时间看expire值。网站

    • 在项目中主要用于记住用户名密码或记录用户浏览过的网页。code

Session

  • Session从字面上解释就是“会话”。服务器要知道当前发请求给本身的是谁。为了作这种区分,服务器就要给每一个客户端分配不一样的“身份标识”,而后客户端每次想服务器发请求时,都带上这个“身份标识”,服务器就知道这个请求来自于谁。至于客户端怎么保存这个“身份标识”,能够有不少种方式,对于浏览器客户端,默认采用Cookie的方式。

  • 服务器使用Session把用户的信息临时保存在服务器上,用户离开网站后Session会被销毁。这种用户信息存储方式相对于Cookie来讲更安全,但是Session有一个缺陷就是若是web服务器作了负载均衡,那么下一个操做请求到了另外一台服务器的时候Session会丢失。

  • session在项目中的应用场景:

    • 通常只保存登陆用户的用户名,时长默认是30分钟,因此为何当你登陆系统后一段时间不使用就须要从新登陆,由于30分钟后Session就已经丢失了。
  • 总结:

    • Session由Web服务器生成,保存在服务端。
    • Session的数据格式也是键值对。
    • Session默认失效时间为30分钟。通常在浏览器的开发者工具(F12)的响应头的Cookie(或Set-Cookie)中查看,在项目中主要用于鉴权判断是否登陆状态,只有是登陆状态才能够访问服务器的网页和数据。

Token

  • Token字面意思就是“令牌”,用户身份的验证方式,有点相似于Cookie,相对来讲更安全。

  • 产生的过程:

  1. 用户第一次登陆,服务端会产生一个Token,Token会存在于服务器的数据库上,而后将这个Token返回给浏览器。
  2. 客户端收到Token以后会将Token存储在本地上。
  3. 客户端再次发送请求的时候,会将Token发送到服务器上。
  4. 服务端收到这个Token时会将Token与本身本地的Token进行比较,得以来验证身份。
  • Token在项目中的应用场景:

    通常用于App项目登陆鉴权或接口鉴权。由于App项目和接口客户端都不是浏览器,所以就没有Cookie和Session。因此经过Token来鉴权。

  • 有些系统的Token直接显示在后面的页面上,而接口的Token通常在登陆接口的返回值里面。

相关文章
相关标签/搜索