首页 > 其他分享 >分析HttpServletRequest的sessionId不一致的原因

分析HttpServletRequest的sessionId不一致的原因

时间:2023-01-16 22:06:19浏览次数:46  
标签:HttpServletRequest 跨域 sessionid 接口 sessionId session cookie 一致


事情是这样的:

在接口①存入session,接着在接口②获取session,结果:同一个key,却打印为空!!!

为何不同?

一、从session的原理上来看:

session的工作原理就是依靠cookie来做支撑,第一次使用request.getSession()时session被创建,
并且会为该session创建一个独一无二的sessionid存放到cookie中,然后发送会浏览器端,
浏览器端每次请求时,都会带着这个sessionid,服务器就会认识该sessionid,
知道了sessionid就找得到哪个session。以此来达到共享数据的目的。
这里需要注意的是,session不会随着浏览器的关闭而死亡,而是等待超时时间。

 

二、因此我先通过在后端打印sessionId来找问题所在:

分析HttpServletRequest的sessionId不一致的原因_跨域

 

分析HttpServletRequest的sessionId不一致的原因_跨域问题_02

 

分析HttpServletRequest的sessionId不一致的原因_ios_03

 结果发现:除第二个接口,其它接口的sessionId都相同。

那我们重点关注第二个接口!!

但是后端无问题,于是猜测bug在前端。

 

三、从cookies的同源策略来看:

需保证:1.协议相同      2.域名相同      3.端口相同。

 

四、前后端分离下的跨域问题:

前端应设置axios强制携带cookie:

分析HttpServletRequest的sessionId不一致的原因_跨域_04

 后端写一个CorsConfig跨域类:

/*
* 解决跨域问题
* */
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
// 设置允许跨域的路径
registry.addMapping("/**")
// 设置允许跨域请求的域名
.allowedOrigins("*")
.allowedHeaders("*")
// 是否允许证书 不再默认开启
.allowCredentials(true)
// 设置允许的方法
.allowedMethods("*")
// 跨域允许时间
.maxAge(3600);
}
}

 

五、检查协议+域名+端口

结果,确实是ip写错了(造成后端以为这个接口,不满足同源)!!卧兔了...

睡觉!

标签:HttpServletRequest,跨域,sessionid,接口,sessionId,session,cookie,一致
From: https://blog.51cto.com/u_15664219/6010862

相关文章

  • Redis 缓存和 MySQL 如何实现数据一致性
    需求起因在高并发的业务场景下,数据库大多数情况都是用户并发访问最薄弱的环节。所以,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问MySQL等数据库。......
  • cache 一致性
    合这个状态图,我们深入分析MESI协议的一些实现细节。(1)某个CPU(CPUA)发起本地读请求(LocalRead),比如读取某个内存地址的变量,如果此时所有CPU的Cache中都没加载此内存地......
  • go-zero的一致性hash
    最近在尝试使用图来记录如何处理一个虚拟节点映射到多个物理节点(hash冲突,也就是图中(a2,b2在一起了,我们只能找到最后映射的物理节点))首先连线对应的是一个物理节点......
  • spring boot——请求与参数校验——spring-mvc——通过 HttpServletRequest 获取请求
    我们可以在控制器方法中设置一个HttpServletRequest类型的形参, SpringMVC会自动将请求中携带的参数封装到HttpServletRequest形参中, 然后我们就可以通过HttpS......
  • SAP 交货单与HU指派关系数据不一致问题的解决方案
    SAP交货单与HU指派关系数据不一致问题的解决方案  我所在的项目是一个超大型的GlobalSAP项目,客户是一家跨国企业巨头,其SAP系统早已实施十几年了。除了SAP系统,客户还......
  • Django保存的时间与系统时间不一致
    在使用Django项目打印时间时发现与系统时间不一样,原因是django默认使用的是格林尼治的时间,与北京时间差八个小时解决办法:在Django的配置文件settings.py中,有两个配置参数是......
  • 一致性哈希算法
    一个良好的分布式哈希方案,应该具有良好的单调性,即服务节点的增减不会造成大量哈希的重新定位。首先,一致性哈希算法会将整个哈希值空间理解成一个环,其取值范围是\(0\sim2^......
  • SparkSQL与Hive查询不一致问题
    问题Sparksql查询出的数据量与hive不一致,重启spark就没问题,查询结果一致。或者报错说读取的文件不存在,类似如下的错误FileReadException:Errorwhilereadingfilexxx.......
  • 从实战出发,聊聊缓存数据库一致性
    在云服务中,缓存是极其重要的一点。所谓缓存,其实是一个高速数据存储层。当缓存存在后,日后再次请求该数据就会直接访问缓存,提升数据访问的速度。但是缓存存储的数据通常是短......
  • 工作场景中的Redis主从不一致
    背景某种类型页面的数据缓存时间是6分钟,上沙盒之后,发现在该类型页面下不同的实际页面的数据有些展现,有些不展现,此外,刚刚展现的同一个页面刷新后数据就不展现了,再刷新又展......