在 Web 开发领域,相信大家对于 Cookie 和 Session 都很熟悉,Cookie 和 Session 都是会话保持技术的解决方案。随着技术的发展,Token 机制出现在我们面前,不过很多开发者对于 Token 和 Cookie、Session 的区别及使用场景分辨不清。

session 和 cookie
一、什么是 session 和 cookie
  • 首先要知道HTTP请求是无状态的,也就是不知道这一次的请求和上一次请求是否有关系,比如我们登录一个系统的时候,验证用户名密码之后,打开系统各个页面的时候就不需要再进行登录操作了,直到我们主动退出登录或超时退出登录;这里为了避免访问每个都登录一下,就要用到 session、cookie;
  • cookie 是在客户端(浏览器)保存用户信息的一种机制;而且每种浏览器存储大小会有一些差异,一般不超过4KB;
  • session是在服务端保存,可以用于记录客户状态,比如我们经常会用 session 保存客户的基本信息、权限信息等;用户第一次登录之后,服务器就会创建一个 session,浏览器再次访问时,只需要从该 session 中查找该客户的信息就可以了。
二、Cookie 和 Session 的用途
  • 要知道我们访问网站都是通过 HTTP 协议或 HTTPS 协议来完成的,HTTP 协议它本身是无状态的协议(即:服务器无法分辨哪些请求是来源于同个客户)。而业务层面会涉及到客户端与服务器端的交互(同网站下多个页面间能共享数据),此时服务器端必须要保持会话状态,这样才能进行用户身份的鉴别。
  • 由于 HTTP 无状态的特性,如果要实话客户端和服务器端的会话保持,那就需要其它机制来实现,于是 Cookie 和 Session 应运而生。
  • 通常情况下,Session 和 Cookie 是搭配在一起使用的。
Token
一、为什么会产生Token?

在这里会有个问题,服务器要保存所有用户的 session 信息,开销会很大,如果在分布式的架构下,就需要考虑 session 共享的问题,需要做额外的设计和开发,例如把 session 中的信息保存到 Redis 中进行共享;所以因为这个原因,有人考虑这些信息是否可以让客户端保存,可以保存到任何地方,并且保证其安全性,于是就有了Token。

二、什么是Token?
  • Token 是服务端生成的一串字符串,可以看做客户端进行请求的一个令牌。
  • 当客户端第一次访问服务端,服务端会根据传过来的唯一标识 userId,运用一些加密算法,生成一个 Token,客户端下次请求时,只需要带上 Token,服务器收到请求后,会验证这个 Token。
  • 有些公司会建设统一登录系统(单点登录),客户端先去这个系统获取 Token,验证通过再拿着这些 Token 去访问其他系统;API Gateway 也可以提供类似的功能,我们公司就是这样,客户端接入的时候,先向网关获取 Token,验证通过了才能访问被授权的接口,并且一段时间后要重新或者 Token。
  • Token 俗称为“令牌”,它的构成是:
    • uid:用户唯一身份标识;
    • timestamp:当前时间戳;
    • sign:签名字符串,防止第三方伪造数据;签名密钥是存储在服务器端的,其它人无法知道;
    • 其它附加参数。
三、基于Token的认证流程
  • 客户端使用用户名、密码做身份验证;
  • 服务端收到请求后进行身份验证(也可能是统一登录平台、网关);
  • 验证成功后,服务端会签发一个 Token 返回给客户端;
  • 客户端收到 Token 以后可以把它存储起来(可以放在);每次向服务端发送请求的时候,都要带着 Token;
  • Token 会有过期时间,过期后需要重新进行验证;
  • 服务端收到请求,会验证客户端请求里面的 Token,验证成功,才会响应客户端的请求;

总结
  • cookie:

    • 保存在浏览器中,有大小限制,有状态;
    • 由于存放在客户端,所以是不安全的,人为可以清除;
    • cookie 有过期时间设定,如果不设置过期时间,说明这个 cookie 就是当前浏览器的会话时间,浏览器关了,cookie 就存在了。如果有过期时间,cookie 就会存储到硬盘上,浏览器关闭不影响 cookie。下次打开浏览器,cookie 还存在;
    • cookie 有大小的限制,4KB。
  • session:保存在服务器中,服务器有资源开销,分布式、跨系统不好实现;
  • Token:客户端可以将 Token 保存到任何地方,无限制,无状态,利于分布式部署。

【网络通信与信息安全】之深入分析Token、session和cookie的使用场景和区别相关推荐

  1. session和cookie的应用场景和区别

    cookie存于客户端,session存于服务器端. cookie的作用是与服务器进行交互,作为http规范的一部分存在,而web storage是为了在本地存储"数据"而生. c ...

  2. 【微信小程序】token/session失效了该怎么跳转页面

    token/session失效了,使用 wx.reLaunch 跳转到登录页面. wx.reLaunch的逻辑是关闭所有页面,打开到应用内的某个页面.这样就能回到登录页,而不用担心返回的问题了. 参考 ...

  3. 【网络通信与信息安全】之深入解析两台主机之间的通信过程和原理

    一.前言 本文通过在 Docker 容器中执行命令,来深入了解两台主机之间的通信过程.阅读完本文,您将熟悉以下内容: Docker 的基本操作: 创建 socket 并发送 HTTP 请求: 路由表. ...

  4. cookie、Session、Token、sessionStorage、localStorage简介__Token放在 cookie, sessionStorage 和 localStorage中区别

    cookie.Session.Token.sessionStorage.localStorage简介 cookie 是一个非常具体的东西,只得是浏览器里永久存储的一种数据,是浏览器实现的一种数据存储功 ...

  5. expires为session_面试必问:session,cookie和token的区别

    点击上方蓝字关注我们 ! session,cookie和token究竟是什么 简述 cookie,session,token作为面试必问题,很多同学能答个大概,但是又迷糊不清,希望本篇文章对大家有所帮 ...

  6. qq空间登陆 cookie_把这篇 Session、Cookie、Token看完,和面试官随便谈人生

    先看大纲: Cookie 和 Session HTTP 协议是一种无状态协议,即每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录:Session 和 Cookie ...

  7. qq空间登陆 cookie_看完这篇 Session、Cookie、Token,和面试官扯皮就没问题了||CSDN博文精选...

    作者:程序员cxuan Cookie 和 Session HTTP 协议是一种无状态协议,即每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录:Session 和 ...

  8. session 、cookie、token的区别

    session session的中文翻译是"会话",当用户打开某个web应用时,便与web服务器产生一次session.服务器使用session把用户的信息临时保存在了服务器上,用 ...

  9. 【网络通信与信息安全】之深入解析从输入一个URL到页面加载完成的过程

    一.前言 从输入一个 URL,然后按下回车到显示页面,中间发生了什么?这是一道经典的面试题,不光前端面试会问到,后端面试也会被问到.这道题没有一个标准的答案,它涉及很多的知识点,面试官会通过这道题了解 ...

最新文章

  1. Android Studio 初体验
  2. 2021年3月12日 北京格灵深瞳Java开发实习面试(一面)
  3. KafkaProducer初始化时涉及到哪些核心组件?
  4. python电商项目源码_Python Django(WEB电商项目构建)
  5. python图片识别-Python+Opencv识别两张相似图片
  6. C语言基础:C语言指针(6) - 指针和字符串
  7. ibm+x3650+m4+linux+raid驱动,IBM X3650M4阵列卡驱动下载
  8. linux指令查看tomcat日志
  9. Nhibernate.hbm2ddl.auto配置详解
  10. java接收前台tex格式t数据_java 下载文件时,设置response.setContentType 根据文件类型...
  11. web.xml 报错
  12. code principles
  13. 基于邮件推拉技术的数据库远程数据同步解决方案
  14. 程序员头发都是怎么没的?第二个原因扎心了!
  15. 【剑指offer】JZ55 二叉树的深度 python
  16. 北斗导航 | EagleEye2000:国产激光雷达走进测绘世界
  17. android学习笔记之磁场传感器制做指南针
  18. 【R语言】实验五 综合应用
  19. 《向上生长》九边 读后感
  20. lol人物模型提取(一)

热门文章

  1. 出现“ORA-28000:the account is locked”的解决办法
  2. 1.8-1.10 大数据仓库的数据收集架构及监控日志目录日志数据,实时抽取之hdfs系统上...
  3. R语言里面的循环变量
  4. MacOS安装react。问题 -- npm全局包的权限问题
  5. 前端--3、JavaScript
  6. php中empty(), is_null(), isset()函数区别
  7. 在C#中利用SharpZipLib进行文件的压缩和解压缩
  8. 未处理的异常:进程性能计数器已禁用
  9. linux编译动态库未定义,自定义动态库 对‘*’未定义的引用解决方法
  10. string转换bigdecimal_使用MapStruct处理恼人的bean转换