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

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

Cookie

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

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

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

    • 日常登录一个网站,今天输入用户名密码登录成功了,第二天无需要重新输入用户名和密码。这个时候用到的一个机制就是Cookie。
    • 浏览器记录用户浏览过的网页。
  • 总结:

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

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

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

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一般在登录接口的返回值里面。

内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/caituotuo/p/14327709.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!