JMeter脚本JSession ID异常求助:跨事务ID不一致问题
针对你遇到的「点击功能事务返回新JSessionID,但浏览器全程保留初始会话ID,JMeter却更新为新ID」的问题,可按以下步骤排查解决:
调整HTTP Cookie管理器策略,避免无效Cookie覆盖
打开HTTP Cookie管理器,将「Cookie Policy」设置为standard(或compatibility),确保JMeter按浏览器的Cookie匹配逻辑(域、路径、有效期等)处理Cookie。如果点击功能返回的JSessionID路径/域与初始会话不同,浏览器会保留多个Cookie并按请求路径匹配发送,调整策略后JMeter可模拟该行为。用JS223后置处理器过滤不必要的Set-Cookie
在「点击功能」请求下添加JS223后置处理器(推荐用Groovy语言),编写代码过滤掉该请求返回的新JSessionID,阻止Cookie管理器更新会话:// 获取响应头中的Set-Cookie字段 def setCookieHeader = sampler.getResponseHeaders().getHeader("Set-Cookie") if (setCookieHeader != null) { // 过滤掉包含JSESSIONID的条目(保留其他必要Cookie) def filteredCookies = setCookieHeader.split(", ").findAll { !it.startsWith("JSESSIONID=") }.join(", ") // 更新响应头,移除原Set-Cookie并添加过滤后的内容 sampler.getResponseHeaders().removeHeader("Set-Cookie") if (!filteredCookies.isEmpty()) { sampler.getResponseHeaders().addHeader("Set-Cookie", filteredCookies) } }避免手动关联与Cookie管理器冲突
你同时使用了手动JSessionID关联和HTTP Cookie管理器,两者可能互相覆盖。建议二选一:- 若用Cookie管理器:删除所有手动添加的JSessionID请求头,让Cookie管理器自动处理会话传递;
- 若手动关联:禁用HTTP Cookie管理器,确保所有请求的Cookie头都使用你关联的初始JSessionID变量。
检查自动重定向设置
如果「点击功能」请求存在重定向,JMeter默认自动跟随重定向可能会在过程中获取新会话ID。可在该请求的「高级」标签下,取消勾选「自动重定向」和「跟随重定向」,手动处理重定向流程,精准控制Cookie的接收。验证Cookie属性匹配
对比登录请求和点击功能请求返回的JSessionID的「Path」「Domain」属性:如果点击功能返回的Cookie路径更窄(如/function),而后续搜索、创建请求的路径为/,则浏览器会发送初始会话ID,此时需确保JMeter的Cookie管理器按路径匹配发送对应Cookie,而非直接使用最新的JSessionID。
内容的提问来源于stack exchange,提问作者zenitsu Agastuma

