文章目录

  • 一、Session存在服务器上还是tomcat中?
    • 1. 创建springboot项目
    • 2. 启动项目
    • 3. 调用登录接口
    • 4. 调用获取用户信息接口
    • 5. 重启tomcat调用获取用户信息接口
  • 二、Session与Cookie的关系
  • 三、传统Session
    • 3.1. 启动项目
    • 3.2. 浏览器测试
  • 四、分布式Session解决方案
    • 4.1. Spring Session + Redis
    • 4.2. Token + Redis
    • 4.3. Token + JWT
  • 五、方案区别
一、Session存在服务器上还是tomcat中?

案例演示流程:
1.创建springboot项目
2.启动项目
3.调用登录接口
4.调用获取用户信息接口
5.重启tomcat调用获取用户信息接口

1. 创建springboot项目

pom

       <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>

测试案例

package com.gblfy.distributed.session.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpSession;@RequestMapping("/user")
@RestController
public class UserController {@GetMapping("/login")public String login(@RequestParam String username,@RequestParam String password,HttpSession session){//账号密码正确session.setAttribute("login_user", username);return "登录成功";}@GetMapping("/info")public String info(HttpSession session) {return "当前登录的是:" + session.getAttribute("login_user");}
}
2. 启动项目

3. 调用登录接口
#登录接口
http://localhost:8081/user/login
4. 调用获取用户信息接口
#获取用户信息接口
http://localhost:8081/user/info

用户登录之后,获取用户信息,可以正常获取

5. 重启tomcat调用获取用户信息接口

发现在重启tomcat调用获取用户信息接口,用户信息为null
得出结论:说明session不能实现共享,下面会继续证明

二、Session与Cookie的关系

cookie 和session 的区别:

  • 1.cookie数据存放在客户的浏览器上,session数据放在服务器上。
  • 2.cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
    考虑到安全应当使用session。
  • 3.session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
    考虑到减轻服务器性能方面,应当使用COOKIE。
  • 4.单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie
  • 5.Session和Cookie是不分家的,Session就存放在浏览器请求的Header中的Set-Cookie这个属性上
三、传统Session
3.1. 启动项目

演示同一程序启动8081端口和8082端口模拟2个服务器分布式

3.2. 浏览器测试

1.调用8081登录接口
2.调用8081获取用户信息接口,可以正常获取用户信息
3.调用8082获取用户信息接口,无法获取用户信息

#登录接口
http://localhost:8081/user/login
http://localhost:8082/user/login#获取用户信息接口
http://localhost:8081/user/info
http://localhost:8082/user/info

得出结论:说明session不能实现共享

四、分布式Session解决方案
4.1. Spring Session + Redis

https://gblfy.blog.csdn.net/article/details/113807497

4.2. Token + Redis

https://gblfy.blog.csdn.net/article/details/113807504

4.3. Token + JWT

https://gblfy.blog.csdn.net/article/details/113807506

五、方案区别

Jwt:token里面的内容可以被解析,但是不能被篡改,因此,token中的不能存放敏感性信息
例如:密码

Srpring-session/token+redis token 不能被解析,更不可能被篡改

总结:关于采用哪种方案根据需求而定即可。

分布式6大核心专题_分布式Session相关推荐

  1. 分布式6大核心专题_分布式ID

    文章目录 一.号段模式 1. 拉取项目源码编译 2. springboot集成Leaf 3. 配置leaf.properties 4. 创建数据库 5. 初始化表结构和数据 6. 测试案例 7. 浏览 ...

  2. 分布式和微服务区别_分布式、集群、微服务到底有啥区别?

    点击上方"不太厉害的程序猿",选择"置顶或者星标" 你关注的就是我关心的! 来源说明:部分信息来源于csdn 概念: 集群是个物理形态,分布式是个工作方式. 1 ...

  3. python分布式爬虫及数据存储_分布式爬虫

    爬虫学习使用指南 Auth: 王海飞 Data:2018-07-05 Email:779598160@qq.com github:https://github.com/coco369/knowledg ...

  4. spring整合atomikos实现分布式事务的方法示例_分布式事务中的XA和JTA

    在介绍这两个概念之前,我们先看看是什么是X/Open DTP模型. X/Open X/Open,即现在的open group,是一个独立的组织,主要负责制定各种行业技术标准.X/Open组织主要由各大 ...

  5. spring整合atomikos实现分布式事务的方法示例_分布式事务一:基于数据库原生分布式事务方案实现...

    1.分布式事务模型 ACID 实现 1.1.X/Open XA 协议(XA) 最早的分布式事务模型是 X/Open 国际联盟提出的 X/Open Distributed Transaction Pro ...

  6. spring整合atomikos实现分布式事务的方法示例_分布式-分布式事务处理

    在之前的文章"如何合理的使用动态数据源"中,其实也提到了分布式事务相关的场景如:利用多数据源实现读写分离,但直接使用动态数据源频繁其实是很消耗资源的,而且就是当业务service一 ...

  7. 分布式模块之间的调用_分布式事务

    一.什么是分布式事务: 分布式事务是指事务的参与者.支持事务的服务器.资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上. 比如说:电商系统中的订单系统与库存系统 图中包含了库存和订单两个 ...

  8. 分布式锁的应用场景_分布式缓存技术Redis:高级应用(主从、事务与锁、持久化)...

    安全性设置 设置客户端操作秘密 redis安装好后,默认情况下登陆客户端和使用命令操作时不需要密码的.某些情况下,为了安全起见,我们可以设置在客户端连接后进行任何操作之前都要进行密码验证.修改redi ...

  9. 分布式mysql 不支持存储过程_分布式数据库VoltDB对存储过程的支持

    设计数据库架构 VoltDB是关系数据库产品.关系数据库由具有约束,索引和视图的表和列组成.VoltDB使用标准SQL数据库定义语言(DDL)语句来指定数据库架构.因此,为VoltDB数据库设计架构使 ...

最新文章

  1. Cisco Catalyst 2960系列交换机资料
  2. Android .classpath文件的作用
  3. 算法提高 身份证排序
  4. UFLDL深度学习笔记 (三)无监督特征学习
  5. javascript window.confirm确认 取消对话框实现代码小结
  6. [C++11]共享智能指针shared_ptr指定删除器
  7. MySQL 纯insert_MySQL使用INSERT插入多条记录
  8. tiny4412移植tslib库
  9. 优秀!Python神器NumPy 论文终登上了 顶刊Nature!
  10. 畅通工程---并查集
  11. 『Material Design 入门学习笔记』前言
  12. 设置透明色有残留怎么办_冬天车玻璃结冰,车被冻住了怎么办?据说只有10%的人做对了...
  13. Matlab根据滤波器系数画出幅频特性曲线
  14. java dwg转pdf_CAD处理控件Aspose.CAD转换功能演示:使用Java将DWG和DXF文件转换为PDF...
  15. Android约束布局
  16. 什么是串行端口?分哪几种类?-道合顺大数据Infinigo
  17. Win7旗舰版 安装步骤
  18. yolov5-4.0转caffe记录
  19. 【矿渣】【玩客云】玩客云驱动OLED屏幕
  20. 京东网页制作之TAB切换栏(内含jquary筛选器介绍)

热门文章

  1. 费城中餐馆奇葩鸡翅定价引爆网络,数万网友想要破解数学谜题
  2. c++ curl 超时_cc++写网络爬虫,curl+gumbo配合使用
  3. 使用IDEA 连接mysql数据库,执行sql指令
  4. c语言上机指导答案清华,第一章自测练习答案清华大学c语言习题实验指导及课程设计...
  5. 阿里开源支持10万亿模型的自研分布式训练框架EPL(EasyParallelLibrary)
  6. 贾扬清演讲实录:一个AI开发者的奇幻漂流
  7. GRPC: 如何实现分布式日志跟踪?
  8. 《阿里云互联网多媒体存储解决方案蓝皮书》震撼上线!
  9. 美军开发远程人脸识别系统,实现1公里内目标识别
  10. 2019年全球最受欢迎数据库新鲜出炉,你猜中了吗?