IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 理解Cookie,Session,Token -> 正文阅读

[系统运维]理解Cookie,Session,Token

1.Cookie 和 Session

http本身无状态,就是不保存任何用户信息。 所以引入cookie(客户端方案)、session(服务端方案)来保存用户信息

http 为什么无状态?
很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新的HTTP协议, 就是请求加响应, 尤其是我不用记住是谁刚刚发了HTTP请求, 每个请求对我来说都是全新的。
但是随着交互式Web应用的兴起,像在线购物网站,需要登录的网站等等,马上就面临一个问题,那就是要管理会话,必须记住哪些人登录系统, 哪些人往自己的购物车中放商品, 也就是说我必须把每个人区分开,这就是一个不小的挑战,因为HTTP请求是无状态的,所以想出的办法就是给大家发一个会话标识(session id), 说白了就是一个随机的字串,每个人收到的都不一样, 每次大家向我发起HTTP请求的时候,把这个字符串给一并捎过来, 这样我就能区分开谁是谁了

1.1 区别

讲一下Cookie和Session?
cookie因为保存在客户端存在:
安全问题(拦截或本地文件找到cookie,存在被篡改的风险)
大小的限制(一般不超过4kb)
只能存字符串

而session保存在服务器端:
使用的是map数据结构实现,通过 session.setAttribute(“key”,value) 存信息 和 session.getAttribute(“key”) 得到value。当用户已登录系统后你就在session中存储了一个用户信息对象,此后你可以随时从session中将这个对象取出来进行一些操作,比如进行身 份验证等等.
所以它可以保存各种类型的数据,大小也没有限制

注意:
1、但session不适合保存比较多的信息,防止服务端压力过大。一般只存ID,比如一个网站同时几万人访问,服务器端要保存这么多 session 对服务器来说压力很大
2、密码也不宜放进session。 private transient String password; 且分布式项目的缘故。

1.2 Cookie 和 session 的生命周期

Cookie 的生存周期?
Cookie在生成时就会被指定一个Expire值,这就是Cookie的生存周期,在这个周期内Cookie有效,超出周期Cookie就会被清除。有些页面将Cookie的生存周期设置为“0”或负值,这样在关闭浏览器时,就马上清除Cookie,不会记录用户信息,更加安全。

session 的生命周期?
当浏览器第一次请求是,服务器端创建一个session对象,同时生成一个sessionId,并在此次响应中将sessionId 以响应报文的方式传回客户端浏览器内存或以重写url方式送回客户端,来保持整个会话。
当超时(30分钟没有进行任何HTTP请求)或者session.invalidate()将session设置为失效;
关闭浏览器不会删除服务端的session,但是可能会删除cookie保存的sessionId。

2.Token

了解 token 吗?
token也是用来保持会话的,在客户端第一次登录后,服务器生成回给客户端,并由客户端保持,在之后的请求的时候带上 token 来表明身份

token 由用户信息和签名组成
签名: 服务端在接受到用户请求的时候判断该请求是否是来自于自己允许的平台(自己允许的平台有统一的规则),由加密算法以及非对称加密密钥生成

2.1 Token的身份验证方法

过程:
1、用户登录通过后,服务器端数据签名,再和数据一起作为token串回给浏览器,自己保存 签名和密钥。
2、客户端保存 token,下次请求的时候在header头里带上 token就行
3、服务器端接收到请求后对 token 中的数据再以同样的方式进行签名,看签名是不是自己的签名
在这里插入图片描述

token 中的数据是明文保存的,所以我不能在其中保存像密码这样的敏感信息。
token的生成一般是采用uuid保证唯一性,当用户登录时为其生成唯一的token,存储一般保存在数据库中
token过期时间采用把token二次保存在cookie或session里面,根据cookie和session的过期时间去维护token的过期时间
token有撤回的操作,通过token revocataion可以使一个特定的token或是一组有相同认证的token无效

2.2 token 优点:

无状态、可扩展
在客户端存储的Tokens是无状态的,并且能够被扩展。基于这种无状态和不存储Session信息,负载负载均衡器能够将用户信息从一个服务传到其他服务器上。

同时因为tokens自己hold住了用户的验证信息也解决了 session 在用户量大时,可能会造成一些拥堵的问题。

安全性
请求中发送token而不再是发送cookie能够防止CSRF(跨站请求伪造)。即使在客户端使用cookie存储token,cookie也仅仅是一个存储机制而不是用于认证。不将信息存储在Session中,让我们少了对session操作。

token是有时效的,一段时间之后用户需要重新验证。我们也不一定需要等到token自动失效,token有撤回的操作,通过token revocataion可以使一个特定的token或是一组有相同认证的token无效。

可扩展性
Tokens能够创建与其它程序共享权限的程序使用tokens时,可以提供可选的权限给第三方应用程序。当用户想让另一个应用程序访问它们的数据,我们可以通过建立自己的API,得出特殊权限的tokens。

多平台跨域
CORS(跨域资源共享),对应用程序和服务进行扩展的时候,需要介入各种各种的设备和应用程序。只要用户有一个通过了验证的token,数据和资源就能够在任何域上被请求到。
基于标准创建token的时候,你可以设定一些选项。它支持众多的语言。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-03-12 18:00:11  更:2022-03-12 18:00:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 1:19:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码