当前位置: 首页 > article >正文

Session、Cookie和Token

Session、Cookie和Token

参考:Session、Cookie、Token 【浅谈三者之间的那点事】

img

HTTP协议是一种无状态协议,即每次服务端接收到客户端请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录;Session和Cookie的主要目的就是为了弥补HTTP的无状态特性。

Session

客户端请求服务端,服务端会为这次请求开辟一块 内存空间,这个对象便是Session对象,存储结构为 ConcurrenthashMap,Session弥补了HTP无状态的特性,服务器可以利用Session存储客户端在同一会话期间的一些操作记录。

session

  • 会话,代表服务器与浏览器的一次会话过程,这个过程是连续的,也可以时断时续。
  • cookie中存放着一个sessionID,请求时会发送这个ID;
  • session因为请求(request对象)而产生;
  • session是一个容器,可以存放会话过程中的任何对象;
  • session的创建与使用总是在服务端,浏览器从来都没有得到过session对象;
  • session是一种http存储机制,目的是为武装的http提供持久机制。

Session如何判断是同一条会话

服务器接收到请求时,开辟一块Session空间(创建的Session对象),同时生成一个sessionId,并通过响应头的Set-Cookie:JSESSION=XXXXXX命令,向客户端发送要求设置Cookie的响应;客户端接收到响应后,在本机设置一个 JESSIONID=XXXXXX的Cookie信息,这个Cookie的过期时间为浏览器会话结束;img接下来客户端每次的请都会带上这个Cookie信息(包含 sessionId ),然后,服务器通过读取请求头中的 Cookie 信息,获取名称为JESSIONID的值,得到此次请求的sessionId。

Session的缺点

Session机制缺点是,例如在A服务器存储了Session,但又做了负载均衡,假如一段时间内A的访问量剧增,访问会被转发到B服务器,但B没有A的Session,会导致 Session 的失效。

Cookie

HTTP协议中的Cookie包括Web Cookie浏览器Cookie,它是服务器发送到Web浏览器的一小块数据。服务器发送到浏览器的Cookie,浏览器会进行存储,并与下一个请求一起发送到服务器。通常用于判断两个请求是否来自同一个浏览器,例如用户保持登陆状态。

HTTP Cookie 机制是 HTTP 协议无状态的一种补充和改良

cookie

储存在用户本地终端上的数据,服务器生成,发送给浏览器,下次请求统一网站给服务器。

Cookie 主要用途

  • 会话管理

登陆、购物车、游戏得分或者服务器应该记住的其他内容

  • 个性化

用户偏好、主题或者其他设置

  • 追踪

记录和分析用户行为

token

令牌,是用户身份的验证方式。
最简单的token组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名)。

对Token认证的五点认识

  • 一个Token就是一些信息的集合;
  • 在Token中包含足够多的信息,以便在后续请求中减少查询数据库的几率;
  • 服务端需要对cookie和HTTP Authrorization Header进行Token信息的检查;
  • 基于上一点,你可以用一套token认证代码来面对浏览器类客户端和非浏览器类客户端;
  • 因为token是被签名的,所以我们可以认为一个可以解码认证通过的token是由我们系统发放的,其中带的信息是合法有效的;

cookie与session区别

cookie数据存放在客户端上,session数据放在服务器上;

默认关闭浏览器,session消失

cookie不是很安全,且保存数据有限;

session一定时间内保存在服务器上,当访问增多,占用服务器性能。

session与token

作为身份认证,token安全行比session好;
Session 认证只是简单的把User 信息存储到Session 里,因为SID 的不可预测性,暂且认为是安全的。这是一种认证手段。 而Token ,如果指的是OAuth Token 或类似的机制的话,提供的是 认证 和 授权 ,认证是针对用户,授权是针对App 。其目的是让 某App有权利访问 某用户 的信息。

token与cookie

Cookie是不允许垮域访问的,但是token是支持的, 前提是传输的用户认证信息通过HTTP头传输;

token就是令牌,比如你授权(登录)一个程序时,他就是个依据,判断你是否已经授权该软件;cookie就是写在客户端的一个txt文件,里面包括你登录信息之类的,这样你下次在登录某个网站,就会自动调用cookie自动登录用户名;session和cookie差不多,只是session是写在服务器端的文件,也需要在客户端写入cookie文件,但是文件里是你的浏览器编号.Session的状态是存储在服务器端,客户端只有session id;而Token的状态是存储在客户端。


http://www.kler.cn/a/11736.html

相关文章:

  • 【Python】轻松实现机器翻译:Transformers库使用教程
  • Java使用aspose导出pdf、字体乱码问题(小方块,不能识别中文)
  • mapper.xml 使用大于号、小于号示例
  • 编写第一个 Appium 测试脚本:从安装到运行!
  • CSS transform动画
  • Ascend Extension for PyTorch的源码解析
  • vue3 组件篇 Message
  • 人工智能动物农场的猪、牛和蟑螂
  • 《C++高并发服务器笔记——第四章》
  • node 服务发布后无法访问
  • 【Redis数据库】异地公网远程登录连接Redis教程
  • SpringBoot接口 - 如何实现接口限流之单实例
  • webgl-画三角形
  • vue+element-plus上传图片功能以及回显问题还有数量限制
  • 精通 NumPy 数值分析:6~10
  • c/c++:二维数组,数组的行数和列数求法sizeof,数组初始化不同形式,5个学生,3门功课,求学生总成绩和功课总成绩
  • Python操作MySQL就是这么简单
  • ROS开发之如何使用ICM20948 IMU模块?
  • Ubuntu20.04安装matlab2022b
  • 面试官在线点评4份留学生简历! 这些坑你中了几个?如何写项目描述才能被大厂发面试?转专业简历该咋写 | 还有优秀简历展示!
  • HTML—javaEE
  • 【无功优化】基于多目标差分进化算法的含DG配电网无功优化模型【IEEE33节点】(Matlab代码实现)
  • Redis 面试题总结
  • JWT 认证机制
  • 【cmake篇】选择编译器及设置编译参数
  • 四百元以内哪种耳机音质好?2023便宜音质好的蓝牙耳机推荐