Https跳到http时session信息丢失的分析及解决方案


我们在YMU(website monitoring)项目开发过程中发现一个关于登录功能的奇怪的问题。


当按一般流程使用登录功能时是没问题的,即:点击官网 (http://YouMonitor.Us)的login链接,然后跳转到https://YouMonitor.Us/login.shtml,输入正确的用户名和密码后,则能正确转入功能页面(http协议)。


而如果跳过第一步,直接在浏览器中输https://YouMonitor.Us/login.shtml,则不能正确转入功能页面。

 

原因分析

经调试发现是由于session造成的。当用户名和密码通过验证后,YMU会在session中保存登录用户名。

 

在第二种方式下,用户名被保存在https下创建的session中,而不能被传递到http协议,这样当以http协议跳转到功能页面时,发现session中没有用户名,系统就会认为没有登录,就出问题了。

再深入分析session的传递机制,其中一种方式是通过JSESSIONID这个cookie在浏览器和web server之间进行传递的。而为了增强安全性,从tomcat 4.0开始,在https协议下生成的cookie不会被传递到http协议。
这就是登录问题产生的根本原因。

 

解决方案

前一段时间在网上找到一种解决方法,该方法修改tomcat的源代码,以解除cookie传递的限制。该方法的缺点是每次tomcat升级都要重新修改并编译,很不方便。

还有没有更方便的方法呢?上周公司一同事在网上又找到一个更加简洁和方面的方法。其主要思路是建立一个filter, 对所有的Servlet Request做处理,如果session是新的https session,则创建一个JSESSIONID cookie,并设置到Servlet Response中,这样就突破了tomcat的限制,把https下的session传递到http协议下。

根据文章说明试了一下,果然成功了!这下解决了系统的一个BUG,不错啊!

附:源代码

 

1. 先建立Wrapper类,用于处理所有的Serverlet Request:

public class MyRequestWrapper extends HttpServletRequestWrapper{
private HttpServletResponse response = null;

public MyRequestWrapper(HttpServletRequest request) {
super(request);
}

public void setResponse(HttpServletResponse response) { this.response = response;}

public HttpSession getSession(){
HttpSession session = super.getSession();
processSessionCookie(session);
return session;
}

public HttpSession getSession(boolean create){
HttpSession session = super.getSession(create);
processSessionCookie(session);
return session;
}

private void processSessionCookie(HttpSession session){
if (null == response || null == session) {
// No response or session object attached, skip the pre processing
return;
}

// cookieOverWritten - 用于过滤多个Set-Cookie头的标志
Object cookieOverWritten = getAttribute("COOKIE_OVERWRITTEN_FLAG");
if (null == cookieOverWritten && isSecure() && isRequestedSessionIdFromCookie() && session.isNew()) {
// 当是https协议,且新session时,创建JSESSIONID cookie以欺骗浏览器

Cookie cookie = new Cookie("JSESSIONID", session.getId());
cookie.setMaxAge(-1); // 有效时间为浏览器打开或超时
String contextPath = getContextPath();
if ((contextPath != null) && (contextPath.length() > 0)) {
cookie.setPath(contextPath);
}
else {
cookie.setPath("/");
}

response.addCookie(cookie); // 增加一个Set-Cookie头到response
setAttribute("COOKIE_OVERWRITTEN_FLAG", "true");// 过滤多个Set-Cookie头的标志
}
}

}

2. 再把上述Wrapper类与Filter建立关联:

public final class TestFilter implements Filter{
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
MyRequestWrapper myrequest = new MyRequestWrapper(request);
myrequest.setResponse(response);
chain.doFilter(myrequest, response);
}
}

 

Web登录Session全解析:从原理到Redis分布式实践 在Web开发中,HTTP协议的无状态特性使得服务器无法自动识别连续请求是否来自同一用户。为解决这一问题,Session(会话)技术应运而生,它通过在服务器端创建临时存储空间来维持用户状态。其核心原理是服务器生成唯一的Session ID,通过Cookie传递给客户端,客户端在后续请求中携带此ID,服务器据此识别用户并获取关联数据。这项技术的核心价值在于为Web应用提供了可靠的身份认证和状态管理能力,是构建用户登录、购物车、个性化设置等功能的基石。在实际应用中,Session常与Cookie协同工作,并面临存 阅读详情

相关推荐

HTTP 302跳转攻防解析:从协议原理到CTF与渗透实战

HTTP重定向是Web开发中的基础概念,它允许服务器将客户端请求导向另一个资源。其核心原理在于服务器通过返回特定的3xx状态码(如302 Found)和Location响应头,指示客户端自动发起新的请求。这一机制在提升用户体验和实现页面流转方面具有重要技术价值,广泛应用于登录跳转、页面迁移和URL缩短等场景。然而,在安全领域,重定向处理不当可能引发开放重定向、敏感信息泄露等风险。本文聚焦于HTTP 302状态码,结合渗透测试与CTF实战,深入剖析其协议细节、客户端差异化处理行为,并探讨如何利用工具链进行系统

419

https转http时session失效的处理

对于https和http的不同请求,Web容器会生成两个不同的session对象;因此,如果在同一个Web应用中只有部分页面使用SSL,要保证使用SSL的页面与不使用SSL的页面间的相互切换(也就是https请求与http请求间的切换)会话保持连续,那么可以通过在访问的URL中传递sessionId来实现,也就是说在进入或退出https的URL上绑定一个sessionId, 比如从http切

emenwester的专栏 3287

Agent Runtime 三层解耦:Session事件日志、无状态Harness与隔离Sandbox

Agent Runtime 是大模型应用落地的核心基础设施层,其本质是为LLM驱动的自动化工作流提供可观察、可重现、可审计的执行环境。它基于事件驱动架构,将会话(Session)从模型上下文解耦为持久化、带因果链的结构化事件流;Harness作为无状态执行器专注工具调用的确定性转发;Sandbox则通过微虚拟机实现单次调用级的硬件隔离与凭证零暴露。这一设计直击生产环境中context overflow、状态丢失、凭证泄露与不可追溯等高频痛点,显著提升agent在报销审批、合同比对、安全告警等关键业务中的可信

anheku1562的博客 512

springboot解决ajax跨域访问,session丢失的问题

1、前端ajax $.ajax({ url: url, type: 'post', xhrFields: {withCredentials:true}, //前端适配:允许session跨域 data: data, success: function(data) { } }); ajax加上这两句 xhrFields: {withCredentials:true}, //...

u010227042的博客 2336

Apache mod_proxy生产级反向代理配置实战指南

反向代理是现代Web架构的核心组件,其本质是HTTP请求的智能路由与协议转换中间件。它通过拦截客户端请求、重写URL路径、修正响应头(如Location、Set-Cookie)、透传元信息(X-Forwarded-*)等机制,实现前后端解耦与流量治理。技术价值在于统一入口管理、HTTPS卸载、负载均衡及安全策略收敛。典型应用场景包括Java/Tomcat集群前置路由、多租户子域名分发、新老系统共存迁移、微服务网关轻量化部署等。Apache mod_proxy凭借对HTTP协议状态机的深度支持(如ProxyP

weixin_34184158的博客 528

智能驾驶感知模块的测试评估方法(上)

对于智能驾驶系统而言,感知模块是开发难度最大、投入资源最多的核心部分。在智能驾驶开发团队内部,感知模块需要独立进行评测才能及早发现潜在缺陷或判断性能是否有改进。随着近几年BEV、OCC、E2E等新技术方案被越来越多企业应用,感知的评测变得越来越艰难,效率也变得越来越低下。本文作者基于在智驾测试行业多年经验,试图总结感知评测的基本规律和效率提升方法,以供读者一些启发。

vincent_321的博客 2559

http https session丢失

现象描述 项目中仅在登录时使用https连接进行登录请求,登录成功会使用http访问服务器的其它资源。也就说从https连接切换到http。输入正确的用户和密码后总是跳转到登录页面,并没有跳转到主页面。debug了一下程序,发现在跳转到主页时,程序认为 request.getSession("userInfo") 获取的用户信息为 null,用户没有登录。而不适用https连接请求登录,输入正确

fly_zxy的专栏 5192

基于Halium 9为小米平板4移植Ubuntu Touch:内核适配与驱动调试实战

在移动设备生态中,Linux内核作为核心,通过硬件抽象层(HAL)管理底层硬件驱动,为上层系统提供统一接口。其模块化设计允许深度定制,是实现跨平台移植的技术基础。Halium项目正是利用这一原理,构建了一个中间层,将安卓内核的硬件支持能力“翻译”成标准Linux发行版能识别的格式,从而在手机、平板等移动设备上运行Ubuntu Touch、postmarketOS等移动Linux系统,极大地拓展了老旧设备的再利用价值。这一技术为开发者提供了在常见安卓硬件上进行Linux系统开发与定制的可能,尤其在嵌入式与物联

weixin_42639246的博客 371

Session丢失的原因以及处理方式

在ASP.NET的开发中,总遇到Session丢失.最常见的情况是当用户登录后将用户信息保存在Session中例如Session["user"]=user;在其后的页面中检查Session["user"]是否为空,如果为空则要求用户重新登录,我们遇到的问题是在用户登录后的1小段时间后(也许只有5分钟),Session["user"]就已经丢失了,Session["user"]!=null的判断就不

flamelp(翔天)的专栏 2万+

数据库系统概论课后习题答案(第五版 王珊、萨师煊)

第1章 绪论 1 .试述数据、数据库、数据库系统、数据库管理系统的概念。 答: ( l )数据( Data ) :描述事物的符号记录称为数据。数据的种类有数字、文字、图形、图像、声音、正文等。数据与其语义是不可分的。解析在现代计算机系统中数据的概念是广义的。早期的计算机系统主要用于科学计算,处理的数据是整数、实数、浮点数等传统数学中的数据。现代计算机能存储和处理的对象十分广泛,表

早知晓的博客 11万+

告别手动翻页!用幻影联动+DLL调用,5分钟搞定通达信分时指标自动选股

本文详细介绍了如何利用幻影联动软件结合DLL调用技术,实现通达信分时指标的自动化选股。通过改造指标代码和配置幻影联动任务,用户可以在5分钟内完成从信号检测到自动报警的全流程,大幅提升短周期交易的效率和准确性。

weixin_42561040的博客 767

https跳到http时session信息丢失_看完这篇 HTTPS,阿里面试官都不怕!看完就能拿offer...

Cookie 和 SessionHTTP 协议是一种无状态协议,即每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录;Session 和 Cookie 的主要目的就是为了弥补 HTTP 的无状态特性。Session 是什么客户端请求服务端,服务端会为这次请求开辟一块内存空间,这个对象便是 Session 对象,存储结构为 ConcurrentHashMap。Se...

weixin_42413377的博客 662

【联邦学习】联邦平均(FedAvg)_附pytorch代码实现

其他代码包括1)数据集划分;2)训练;3)保存结果;4)绘图都可在 https://github.com/kt4ngw/fedavg-pytorch 找到。如果您对文章有建议及指定,也欢迎您留言评论,作者定当虚心修正。

kt4ngw的博客 5109

http与https切换

Https跳到http时session信息丢失的分析及解决方案 博客分类: YMU开发 Tomcat浏览器WebServlet 我们在YMU(website monitoring)项目开发过程中发现一个关于登录功能的奇怪的问题。 当按一般流程使用登录功能时是没问题的,即:点击官网 (http://YouMonitor.Us)的login链接,然后跳转到https:...

weixin_30340775的博客 110

PL端:HDMI 输出实验

开发板没有HDMI编码芯片,是将FPGA的3.3差分IO直接连接到HDMI连接器,FPGA 完成 24 位 RGB 编码输出TMDS 差分信号。1、学会使用第三点IP核,首先是添加,后面的使用和自带IP核操作一致。2、主要还是在梳理vivado使用流程。

qq_43441284的博客 4287

【Flink】状态编程: 订单超时告警

文章目录一、基础概念二、Flink状态编程1、支持的状态类型2、Managed Keyed State六种类型基本API状态的生命周期3、Managed Operator State三、案例:订单延迟告警统计1、需求描述2、需求分析3、数据与模型4、详细实现 一、基础概念 在Flink架构体系中,有状态计算可以说是Flink非常重要的特性之一。 有状态计算是指: 在程序计算过程中,在Flink...

一只皮皮熊 2862

Streamlit Session State 实战指南:解决页面刷新失忆问题

Streamlit 应用默认无状态,每次请求都会重执行脚本,导致表单数据丢失、多步骤流程中断——这是初学者和进阶开发者共同面临的典型状态管理难题。其本质在于理解 Web 会话(session)与内存变量的绑定机制,而非简单缓存。Session State 提供了会话级隔离的内存空间,支持跨组件、跨 rerun 的状态持久化,是构建登录态、分步表单、动态UI等交互式应用的技术基石。结合 st.rerun() 控制重绘时机、规避 st.cache_data 混用陷阱,并通过类封装提升可维护性,可显著增强应用健壮

WGH100817的博客 629

ABAP CDS Time Functions 全面解析:用 TIMS_IS_VALID 护航时刻字段的正确性

摘要:本文深入解析ABAP CDS时间函数TIMS_IS_VALID的应用,重点介绍其在企业系统时间字段校验中的关键作用。文章指出无效时间数据会导致业务流程混乱,而CDS层校验能有效减少重复逻辑。详细说明TIMS类型格式要求、空值处理规则,并提供两种工程实现方案:在CDS视图中直接派生校验列,或通过ABAP SQL在内存表中批量验证。最后给出可直接运行的代码示例,包括一个ABAP报表演示内存表验证,以及一个CDS View Entity实现系统时间自动映射与校验,帮助开发者在业务场景中快速落地时间校验功能。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 193

Agent Runtime OS化:Session-as-Event-Log架构解析

Agent runtime 正经历从‘模型即核心’到‘状态可管理、执行可审计、沙箱可销毁’的范式跃迁。其本质是将长流程Agent的状态持久化、执行调度与安全隔离解耦,借鉴操作系统虚拟内存、文件描述符和进程隔离的设计思想。Session作为结构化事件日志替代context window存储,Harness作为无状态执行器抽象工具调用,Sandbox实现按需启停的强隔离——这三大支柱共同构成新一代AI运行时基础设施。该架构显著缓解token溢出、状态不可追溯、凭证泄露等高频痛点,支撑客服工单、知识库问答等企业级

weixin_33831673的博客 476

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Anthropic Managed Agents:AI Agent 运行时层的OS化重构

AI Agent 不再是简单链式调用,而是具备状态持久化、故障恢复与可观测性的长期运行实体。其核心原理在于将 session 解耦为结构化事件日志(Event Log),替代传统依赖大模型上下文窗口的状态管理方式,从而突破 token 容量瓶颈、实现秒级故障恢复、支持审计级 trace 分析。这一 runtime 层的 OS 化演进,正推动 agent 开发从‘手写状态机’迈向声明式定义与托管执行,显著提升金融、法律、销售等高可靠性场景的工程落地能力。Anthropic Managed Agents 即是该

weixin_30530339的博客 323

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

托管式Agent运行时:正在坍缩的AI基础设施层

Agent运行时是支撑智能体执行任务的核心环境,其本质是状态管理、工具调度与安全沙箱的工程集合。随着Claude Managed Agents等方案将Session、Harness和Sandbox标准化封装,运行时正从自建护城河快速演变为云厂商可计量的托管服务。这一转变源于上下文窗口瓶颈、状态持久化刚需及沙箱安全合规压力三大技术动因,带来可观测性增强、故障恢复确定性提升与凭证生命周期可控等关键价值。当前已广泛应用于客户支持分诊、发票校验、会议纪要生成等需长流程、高可靠性的企业级场景,而本文聚焦于该运行时层的

weixin_34080571的博客 380

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Managed Agents:Agent Runtime 的操作系统时刻

Agent 运行时(runtime)正经历类似早期操作系统的范式迁移——从自研调度与状态管理,转向标准化、可治理、可计费的托管执行层。其核心原理在于将 session 作为事件日志(event log)持久化,实现状态可审计、可重放与故障确定性恢复;技术价值体现在降低合规成本、提升调试效率、统一安全边界;典型应用场景覆盖金融客服、智能会议纪要、企业级 RAG 工作流等需强治理与高可靠性的生产系统。Anthropic Managed Agents 并非单纯性能优化,而是以 session-as-first-c

weixin_30693683的博客 377
上一篇: MySQL可靠性方案分析与比较
下一篇: Https跳到http时session信息丢失的分析及解决方案
java_veteran
博客等级 码龄19年 2粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值