分布式6大核心专题_分布式Session

文章目录

          • 一、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 不能被解析,更不可能被篡改

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/518868.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nacos: Namespace 和 Endpoint 在生产环境下的最佳实践

随着使用 Nacos 的企业越来越多&#xff0c;遇到的最频繁的两个问题就是&#xff1a;如何在我的生产环境正确的来使用 namespace 以及 endpoint。这篇文章主要就是针对这两个问题来聊聊使用 nacos 过程中关于这两个参数配置的最佳实践方式。 namespce 关于 namespace &#x…

java.lang.ArrayIndexOutOfBoundsException:数组下标越界越界

前台vue初始化 pinIds:[]&#xff0c;但是当pinIds前台查询条件传值为空时&#xff0c;pinIds[0]、pinIds[1]取不到值&#xff0c;就会报数组下标越界越界 改为 就可以了

如何实现“持续集成”?闲鱼把研发效率翻了个翻

阿里妹导读&#xff1a;业务的快速发展&#xff0c;需要我们更快速地响应&#xff0c;和更高质量产品的交付。如何从原来大(xiao)迭(pu)代(bu)的开发模式切换为精益开发模式&#xff1f;以 2-1-1&#xff08;2周需求交付周期&#xff0c;1周需求开发周期&#xff0c;1小时集成时…

分布式Session解决方案_Spring Session + Redis

接上一篇&#xff1a;分布式6大核心专题_分布式Session https://gblfy.blog.csdn.net/article/details/113802195 文章目录1. 安装redis服务并启动2. 引入Spring Session组件3. 分别启动8081端口和8082端口4. 调用8081登录接口5. 调用8081获取用户信息接口6. 调用8082获取用户信…

酸了!华为补贴湖北员工每天最高 2000 元

近日&#xff0c;华为员工发帖称&#xff0c;华为将给武汉研究所现场办公的人员&#xff0c;每人补助2000元&#xff08;从2020年1月23日开始算&#xff0c;以湖北发布疫情终止之日截止&#xff09;&#xff0c;湖北以外其他地区1000 元&#xff0c;海外每天150美金&#xff08…

java.lang.IllegalArgumentException: invalid comparison: java.time.LocalDateTime and java.lang.String

数据库字段&#xff1a; 数据库中的时间字段handle_time是datatime 前端&#xff1a; xml文件&#xff1a; 运行结果&#xff1a; 原因 这是因为原因是mybatis 中对于时间参数进行比较时的一个bug. 如果拿传入的时间类型参数与空字符串进行对比判断则会引发异常. 所以在上面…

四年从P7到P9,这个阿里小二的秘诀是给自己挖坑

恶魔有一头精彩的头发。 “紫色、灰色、灰色、雾霾蓝色、黄色、蓝色、紫色、绿色、灰色、绿色。” 若有人问起她的染发史&#xff0c;她能准确地报出过去两年里的所有发色。干脆利落&#xff0c;没半个字多余。 恰如她在工作中给大多数人的印象&#xff1a;语速极快&#xf…

达摩院首席数据库科学家李飞飞:云原生新战场,我们如何把握先机?

阿里妹导读&#xff1a;云计算大潮来袭&#xff0c;传统数据库市场正面临重新洗牌的情境&#xff0c;包括云数据库在内的一批新生力量崛起&#xff0c;动摇了传统数据库的垄断地位&#xff0c;而由云厂商主导的云原生数据库则将这种“改变”推向了高潮。 云时代的数据库将面临怎…

什么? 搞不定redis分布式锁?

作者&#xff1a;故事凌 分布式锁 1. 什么是分布式锁 分布式锁是控制分布式系统之间同步访问共享资源的一种方式。在分布式系统中&#xff0c;常常需要协调他们的动作。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源&#xff0c;那么访问这些资源的时候&am…

阿里云CDN技术掌舵人文景:相爱相杀一路狂奔的这十年

提到阿里云CDN&#xff0c;不得不提技术掌舵人姚伟斌&#xff08;文景&#xff09;&#xff0c;虽然他不是团队中最“老”的同学&#xff0c;但他却历经了淘宝业务发展最为飞速的几年&#xff0c;见证了从最初服务淘宝和集团内部的CDN&#xff0c;到如今国内服务客户最多的云CD…

把握数据库发展趋势 DBA应如何避免“踩坑”?

在DTCC 2019大会上&#xff0c;阿里云智能数据库产品事业部高级产品专家萧少聪做了题为《如何构建云时代DBA的知识体系》的演讲&#xff0c;进行云时代以后&#xff0c;IT行业各工种的职责都在发生变化&#xff0c;云数据库使得日常DBA管理实现更多的自动化&#xff0c;大大提高…

DevOps 转型时如何安全融入?对企业产出有何影响?2019年 DevOps 最新现状研究报告解读 | 原力计划...

作者 | liumiaocn责编 | 徐威龙封图| CSDN 下载于视觉中国2019年DORA发布了DevOps的研究报告&#xff0c;迄今为止这已经是DORA的第八次报告的发布。相较于往年的报告&#xff0c;2019年的报告全篇只聚焦于一个要素&#xff1a;安全。在2018年DORA提供了一个包含五个步骤的模型…

开源性能可视化工具——FlameScope模式识别

FlameScope是一个新的开源性能可视化工具&#xff0c;它使用次秒级偏移热图和火焰图来分析周期活动、方差、扰动。我们在Netflix TechBlog上面&#xff0c;发表了技术文章Netflix FlameScope&#xff0c;以及工具的源代码。火焰图很好理解&#xff0c;次秒级偏移热图理解起来要…

在腾讯云开通短信验证服务设置正确格式的签名和正文模板并完成群发消息测试

链接&#x1f449; https://blog.csdn.net/weixin_45001200/article/details/118878336?spm1001.2014.3001.5501 经历了一晚上的审核&#xff0c;终于在第二天近10点发来了测试验证码......

独家揭秘:阿里小程序的一云多端!看这篇就够了!

专家介绍 视频回放 https://yq.aliyun.com/live/1097 阿里小程序的一云多端 相信绝大部分同学知道阿里一云多端的项目&#xff0c;最早始于19年三月份在北京云栖大会上&#xff0c;阿里云的CEO在云栖大会上对外发布了一云多端的项目。 一云多端是什么? 大家今天常见都是微…

Docker 概念很难理解?一文搞定 Docker 端口绑定

作者 | Dieter Jordens译者 | 苏本如&#xff0c;责编 | 夕颜出品 | CSDN&#xff08;ID:CSDNnews&#xff09;以下为译文&#xff1a;作为初级开发人员的你&#xff0c;是不是参加过这样的面试&#xff0c;在面试中面试官希望你准确地回答Docker的工作原理&#xff1f;现今的面…

阿里云高级技术专家张毅萍:我眼中的边缘计算

边缘计算是目前公认的大方向&#xff0c;越来越多的边缘计算应用将随着5G建设的步伐而兴起。阿里云边缘计算团队的目标是在行业爆发来临之前&#xff0c;完成基础计算资源平台的构建&#xff0c;为产业提供基于体验的计算调度能力&#xff0c;进而助推整个产业快速应用发展。那…

docker 安装 mysql和Navicat Premium 远程连接

文章目录1. 安装mysql2. Navicat Premium 远程连接1. 安装mysql # 通过搜索镜像 docker search mysql# 拉取mysql镜像 docker pull mysql# 查看拉取的mysql镜像 docker images#创建MySQL容器 docker run -di --name mymysql -p 3306:3306 -e MYSQL_ROOT_PASSWORDroot mysql# 查…

牛客网SQL篇刷题篇(1-2)

https://www.nowcoder.com/ta/sql

阿里PB级Kubernetes日志平台建设实践

阿里PB级Kubernetes日志平台建设实践 QCon是由InfoQ主办的综合性技术盛会&#xff0c;每年在伦敦、北京、纽约、圣保罗、上海、旧金山召开。有幸参加这次QCon10周年大会&#xff0c;作为分享嘉宾在刘宇老师的运维专场发表了《阿里PB级Kubernetes日志平台建设实践》&#xff0c…