分布式Session一致性?

说白了就是服务器集群Session共享的问题

Session的作用?

Session 是客户端与服务器通讯会话跟踪技术,服务器与客户端保持整个通讯的会话基本信息。

客户端在第一次访问服务端的时候,服务端会响应一个sessionId并且将它存入到本地cookie中,在之后的访问会将cookie中的sessionId放入到请求头中去访问服务器,如果通过这个sessionid没有找到对应的数据那么服务器会创建一个新的sessionid并且响应给客户端。

分布式Session存在的问题?

假设第一次访问服务A生成一个sessionid并且存入cookie中,第二次却访问服务B客户端会在cookie中读取sessionid加入到请求头中,如果在服务B通过sessionid没有找到对应的数据那么它创建一个新的并且将sessionid返回给客户端,这样并不能共享我们的Session无法达到我们想要的目的。

解决方案:

  • 使用cookie来完成(很明显这种不安全的操作并不可靠)
  • 使用Nginx中的ip绑定策略,同一个ip只能在指定的同一个机器访问(不支持负载均衡)
  • 利用数据库同步session(效率不高)
  • 使用tomcat内置的session同步(同步可能会产生延迟)
  • 使用token代替session
  • 使用spring-session或者集成好的解决方案,session存放在redis中

0x01:基于数据库的Session共享

首选当然是大名鼎鼎的Mysql数据库,并且建议使用内存表Heap,提高session操作的读写效率。这个方案的实用性比较强,经常被使用,它的缺点在于session的并发读写能力取决于Mysql数据库的性能,同时需要自己实现session淘汰逻辑,以便定时从数据表中更新、删除 session记录,当并发过高时容易出现表锁,虽然可以选择行级锁的表引擎,但不得不否认使用数据库存储Session还是有些杀鸡用牛刀的架势。

0x02:基于Cookie的Session共享

这个方案可能比较陌生,但它在大型网站中还是比较普遍被使用。原理是将全站用户的Session信息加密、序列化后以Cookie的方式, 统一 种植在根域名下(如:.host.com),利用浏览器访问该根域名下的所有二级域名站点时,会传递与之域名对应的所有Cookie内容的特性,从而实现户的Cookie化Session 在多服务间的共享访问。

这个方案的优点无需额外的服务器资源;缺点是由于受http协议头信心长度的限制,仅能够存储小部分的用户信息,同时Cookie化的 Session内容需要进行安全加解密(如:采用DES、RSA等进行明文加解密;再由MD5、SHA-1等算法进行防伪认证),另外它也会占用一定的带宽资源,因为浏览器会在请求当前域名下任何资源时将本地Cookie附加在http头中传递到服务器

0x03:基于Memcache的Session共享

Memcache由于是一款基于Libevent多路异步I/O技术的内存共享系统,简单的 Key + Value 数据存储模式使得代码逻辑小巧高效,因此在并发处理能力上占据了绝对优势。另外值得一提的是Memcache的内存hash表所特有的Expires数据过期淘汰机制,正好和Session的过期机制不谋而合,降低了过期Session数据删除的代码复杂度,对比基于数据库的存储方案,仅这块逻辑就给数据表产生巨大的查询压力。

0x05:基于Redis的Session共享

该方案使用Redis来存储用户的登录状态,Redis服务器也存在多做存储数据的淘汰策略,与Session的过期机制非常类型。目前该方案是互联网公司最广泛使用的方案,没有之一。Spring还专门开发了一个分布式Session的组件。

限制会话id服务端不共享_分布式系统中Session共享的常用方案相关推荐

  1. 限制会话id服务端不共享_会话控制 - able-woman - 博客园

    会话控制是什么? cookie和session都是跟踪整个会话过程的技术手段.而会话,就是用户通过浏览器和服务器的一次通话. 为什么要有会话控制? 因为HTTP协议是无状态的,服务器不知道用户上一次做 ...

  2. 限制会话id服务端不共享_不懂 Zookeeper?看完不懂你打我

    高并发分布式开发技术体系已然非常的庞大,从国内互联网企业使用情况,可发现RPC.Dubbo.ZK是最基础的技能要求.关于Zookeeper你是不是还停留在Dubbo注册中心的印象中呢?还有它的工作原理 ...

  3. 限制会话id服务端不共享_【干货分享】Web安全漏洞深入分析及其安全编码

    阅读: 13,003 超全Web漏洞详解及其对应的安全编码规则,包括:SQL注入.XSS.CSRF.文件上传.路径遍历.越权.XML以及业务安全等,实例告诉你各个漏洞对应的编码规则.给你的代码加把安全 ...

  4. 【微服务之分布式Session】Session机制详解及分布式中Session共享解决方案

    一.为什么要产生Session http协议本身是无状态的,客户端只需要向服务器请求下载内容,客户端和服务器都不记录彼此的历史信息,每一次请求都是独立的. 为什么是无状态的呢?因为浏览器与服务器是使用 ...

  5. 服务端指南 数据存储篇 | 选择合适的数据存储方案

    在服务端会经常遇到数据存储的选型问题,是选择使用关系型数据库 MySQL,还是选择内存数据库 Redis,还是选择文档数据库 MongoDB,还是选择列族数据库 HBase, 还是选择全文搜索引擎 E ...

  6. Spring Cloud Gateway中session共享

    Spring Cloud Gateway中session共享 背景 在进行zuul切换到gateway时,需要重新实现session共享,本文主要分享一下自己实现的方案. zuul中的session共 ...

  7. Session机制详解及分布式中Session共享解决方案

    Session机制详解及分布式中Session共享解决方案 参考文章: (1)Session机制详解及分布式中Session共享解决方案 (2)https://www.cnblogs.com/jing ...

  8. 谷歌pay服务端文档_米大师服务端说明

    1.后台接口说明 1.支付后台接口API 1.1 API 1.1.1 查询余额接口 (1)URL地址 [现网]https:// ysdk.qq.com/mpay/get_balance_m [沙箱]h ...

  9. java服务端开发安全_后端开发:APP与后端交互的安全性

    声明 此文原创,未经允许,禁止转载,可以分享. 最近在做一个项目,是一个APP的后端开发.我需要完成后端框架的建立.数据库设计.后端代码的编写.在这里讲一下APP与后端交互的安全性. 没有AUTH的验 ...

最新文章

  1. tinymce4.x 上传本地图片(自己写个插件)
  2. java 百亿计算器_设计一个一百亿的计算器
  3. Python 文件和目录操作总结
  4. android应用启动次数,应用统计: APP启动次数,软件用时统计,用量提醒
  5. GPU Gems1 - 11 阴影贴图反走样
  6. 算法基础之搜索和经典排序
  7. 改进初学者的PID-介绍
  8. C#LeetCode刷题之#707-设计链表(Design Linked List)
  9. 全志t3linux驱动_全志A20GPIO驱动分析|Android驱动及系统开发交流区|研发交流|雨滴科技技术论坛 - Powered by Discuz!...
  10. iOS 瀑布流之栅格布局
  11. 为什么我会觉得SegmentFault做得越来越力不从心了?
  12. assemblyinstaller 无法启动计算机.上的服务,本地计算机上的Windows Search服务启动然后停止 | MOS86...
  13. JavaScript:typeof的用法以及undefined和null的区别
  14. [PHP 作为iOS后台Json格式HTTP通信及文件上传的实现]
  15. 2021-09-08 全排列
  16. 惠普p1106打印机安装步骤_「惠普打印机驱动安装」惠普P1106打印机怎么安装驱动? - seo实验室...
  17. 最小生成树算法之Prim算法
  18. bat 命令返回结果_bat教程[283] zip压缩
  19. 修改MDK5(keil5)工程文件名称
  20. Asynchronous FIFO with gray code(异步FIFO verilog设计理念)

热门文章

  1. OVS learn学习
  2. Java 的最佳实践
  3. OpenCV系列之轮廓属性 | 二十三
  4. 蓝桥杯软件类Java语言IDE(Eclipse)安装
  5. 杭州市人社局携手法大大,加速推广电子劳动合同
  6. 医院信息系统服务器存储维护,首都医科大学宣武医院电子病历系统服务器及存储设备维护服务项目招标公告...
  7. 职工培训计算机教室标语,企业培训教室标语
  8. leetcode系列--367.有效的完全平方数
  9. 并联串联混合的电压和电流_串联谐振赫兹电力讲解高压电缆主绝缘交流耐压试验的电压电流容量|赫兹|电力|电缆...
  10. 腾讯-- TDW数据仓库数据安全