JMeter测试Laravel应用登录时419错误排查求助
JMeter测试Laravel登录持续遇到419错误求助
问题背景
尝试用JMeter实现Laravel应用登录已近一周,始终触发419状态码,推测问题与XSRF Token验证相关。
已完成的配置操作
- 修改
user.properties文件,添加配置:CookieManager.save.cookies=true - 在获取登录页面的GET请求(Login Get)下添加正则表达式提取器:
- 提取范围:响应头
- 变量名:
xsrf_token - 正则表达式:
XSRF-TOKEN=([^;]+) - 模板:
$1$ - 匹配编号:1
- 默认值:
Not Found
- 测试计划中配置HTTP Cookie管理器:
- 勾选「Use Thread Group」
- 取消勾选「clear cookies each iteration」
- 在Login Get的HTTP Header管理器中设置:
- Name:
X-XSRF-TOKEN - Value:
${xsrf_token}
- Name:
- Login Post请求的请求头配置如图(注:原问题提及配图,此处保留说明)
补充问题
请问以下Set-Cookie中的XSRF-TOKEN格式是否正确?
XSRF-TOKEN=eyJpdiI6ImVteVcyTnhUdHY2ZjdsWmZZYjBiQ3c9PSIsInZhbHVlIjoiZUM5dXpEMEY4YVc2S2RXZlh6anl2MGZoNGMrMkZ5RkVITExlSXcSasVEeDV3dE40VVVxOUdtOFN0Y2M3bW04ZEI5dytISFVNT0VwenhHVm9lUUJQelg0R01VbUlCRGdGMGZBckRFSzNwcDF5RktVVkZuRUpqWEdHa2tEVk0iLCJtYWMiOiJlZWM4ZjcxMTc3NWRlOWE2YmQ1MWE0N2Y2OTgzNzU4YWJhMmNmMWU5MDQ2MTZiMjI5OTEzMTA2NGE4OAFkZjJiIiwidGFnIjoiIn0%3D; expires=Wed, 12 Feb 2025 18:32:45 GMT; Max-Age=7200; path=/; samesite=lax
排查与解决建议
先确认Token提取是否生效
- 添加「查看结果树」组件,检查Login Get的响应头里是否存在
XSRF-TOKEN,同时查看正则表达式提取器的输出,确认xsrf_token变量拿到的是有效内容,而非默认的Not Found - 注意:Laravel返回的XSRF-TOKEN是URL编码过的,提取出来的
${xsrf_token}会包含%3D这类编码字符,直接使用即可,无需额外解码,后端会自动处理
- 添加「查看结果树」组件,检查Login Get的响应头里是否存在
检查Cookie管理器的配置是否生效
- 确认HTTP Cookie管理器已正确关联线程组,且未开启“每次迭代清除Cookie”——Laravel需要
laravel_session会话Cookie与XSRF Token配对才能通过验证,Cookie丢失必然触发419错误 - 查看Cookie管理器中的Cookie列表,确保
XSRF-TOKEN和laravel_session都被正确保存
- 确认HTTP Cookie管理器已正确关联线程组,且未开启“每次迭代清除Cookie”——Laravel需要
调整请求头的配置位置
- Login Get请求不需要添加
X-XSRF-TOKEN头,这个头应该配置在Login Post请求的HTTP Header管理器中 - Get请求的作用仅为获取登录页面及Cookie,Post提交登录请求时才需要携带
X-XSRF-TOKEN头完成验证
- Login Get请求不需要添加
关于XSRF-TOKEN格式的问题
- 你给出的XSRF-TOKEN格式是正确的,这是Laravel生成的标准加密Token:将包含
iv、value、mac、tag等字段的JSON字符串进行base64编码后的结果,末尾的%3D是=的URL编码,属于正常情况
- 你给出的XSRF-TOKEN格式是正确的,这是Laravel生成的标准加密Token:将包含
额外排查方向
- 确保JMeter的请求顺序与真实用户行为一致:Login Get之后立即发送Login Post,避免间隔过久导致会话超时
- 检查Laravel应用的
config/session.php配置,确认same_site设置与Set-Cookie中的samesite=lax匹配 - 可以尝试用「CSS/JQuery提取器」替代正则表达式提取器,从登录页面的HTML中提取
meta[name="csrf-token"]的content值,将该值作为X-XSRF-TOKEN的内容发送请求,这种方式有时比提取Cookie更可靠
内容的提问来源于stack exchange,提问作者BootCamp
相关产品推荐
相关产品推荐

