Session和Cookie是什么?有什么区别?分布式Session问题又是什么?

Session和Cookie是什么?有什么区别?分布式Session问题又是什么?

  • Cookie :是服务器发送到浏览器并保存在本地的数据。在浏览器下一次向同一服务器再次发送请求时,将Cookie也发送给服务器,并以此来判定这个请求是否是浏览器第一次发送的请求。至于是怎么判定的,会在下面的Cookie和Session配合中说到。
  • Session:代表浏览器和服务器的一次会话。Session存储用户会话所需的属性和配置信息。

Session和Cookie的区别

  • 保存位置不同:Session保存在服务器端,Cookie保存在浏览器。正因如此,Cookie在保存数据方面的安全性不如Session,所以Cookie用来保存一些隐私性不强的内容比较合适。
  • 存取内容的方式不同:Cookie只能保存ASCLL,而Session可以保存任意类型。
  • 数据存储的大小不同:Cookie只能保存小于4K的内容,而Session则大小不固定,但肯定的是其大小要比Cookie大的多。

Session和Cookie的配合流程

在用户第一次向服务器发送请求时,服务器会根据用户的信息不同,创建不同的Session,并生成该Session的唯一标识SessionID,返回给浏览器。浏览器在接收到SessionID后,会将SessionID保存在Cookie中,并记录这个SessionID属于哪个域名。

在用户第二次请求服务器时,请求会去查找该域名下是否存在Cookie,存在就将Cookie发送给服务器。服务器会从Cookie中拿到SessionID,并根据这个SessionID查找到对应的Session。

分布式Session问题

在上面的配合流程中,我们就会发现一个问题:在分布式环境下,服务器肯定不止一个,而Session是保存在服务器的。那如果多服务器的环境下,两次的请求发送到不同的服务器,那不就造成SessionID查找不到对应的Session了吗?
这就是分布式Session问题。

解决办法:

  1. Nginx:服务端使用Nginx进行代理,每个请求按照请求的IP的hash进行分配服务器,保证同一IP的请求都会发送到同一服务器。
  2. Session复制:任意一台服务器的Session发生改变的时候,都会广播给所有服务器。
  3. 中间件:将Session保存在一个中间件中。
相关推荐
DsirNg4 天前
凭证不是登录态:从攻击面重做浏览器认证设计
oauth·xss·csrf·token·cookie·认证授权·web 安全
linweidong4 天前
阿里Lazada Java面经及参考答案
大数据·高并发·反射·拦截器·session·幂等性·redis性能
竹枝溪14 天前
Tomcat与Servlet全套小白教程
java·servlet·tomcat·cookie·filter·session·listener
DsirNg18 天前
登录态失控时,前端如何止损:从令牌轮换到会话退出的完整设计
xss·csrf·cookie·会话管理·前端安全·登录态·刷新令牌
orient.lu22 天前
第 14 章《会话管理 SessionManager》· 会话管理怎么做?SessionManager 原子写 + fsync 持久化实战(nanobot)
session·nanobot
CappuccinoRose1 个月前
前端存储体系学习总结文档
前端·客户端·cookie·ssr·服务端·localstorage·sessionstorage
凡尘——雨落凡尘1 个月前
PHP 线上十大隐形故障复盘:90% 的网站卡顿、502、雪崩,都是这些细节导致的
redis·nginx·php·session
ShineWinsu1 个月前
对于Linux:HTTP中cookie、session的解析
linux·网络·c++·网络协议·http·cookie·session
花生了什么事o1 个月前
Session 和 Cookie 的区别、原理与应用场景
cookie·session
深蓝电商API3 个月前
浏览器自动化中的Cookie和Session管理最佳实践
数据采集·cookie·session