You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

页面重载后req.session.cookies和req.session.user丢失问题(Nextjs/Expressjs)

排查与解决步骤

  1. 先确认中间件重复触发的原因
    Next.js 12及以上版本默认中间件会响应所有进站请求,包括页面、静态资源、favicon、内部接口等,你看到的第二次调用大概率是页面加载过程中触发的其他资源请求,并非同一次页面请求的重复执行。你可以在中间件中打印req.url确认两次请求的具体路径,快速定位触发源。
    你可以通过配置matcher规则,限制中间件仅在目标路由触发,排除不需要的路径:
// 在middleware.ts同文件下添加
export const config = {
  matcher: ['/((?!_next/static|_next/image|favicon.ico|api).*)']
};

配置完成后再观察日志是否还存在多次调用的情况。

  1. 排查session丢失的根因
  • 校验cookie配置规则:升级Node/Next.js版本后,框架默认的安全策略会收紧,检查session.ts中的cookie配置项,domain、path、sameSite、secure属性是否匹配当前站点的访问地址,如果是本地开发环境不要强制开启secure: true,否则http协议下cookie不会被携带。
  • 检查中间件的响应处理逻辑:如果你在中间件中做了重定向、自定义返回响应的操作,需要确保session库自动生成的Set-Cookie响应头被正确传递,不能直接覆盖响应头导致session cookie没有被写入客户端,后续请求自然无法解析出session数据。
  • 确认session依赖库的版本兼容性:你使用的session管理库(如next-session、express-session)需要兼容你当前的Node.js和Next.js版本,部分低版本的session库没有适配Node 18+的fetch API cookie规则、Next.js的App Router新特性,会导致cookie解析失败出现空对象的情况。
  1. 快速验证方案
    你可以先回退到升级前的Node和Next.js版本,确认问题是否复现,如果回退后恢复正常,基本可以确定是版本兼容或者配置规则变更导致的问题,再针对性修改配置即可。

内容的提问来源于stack exchange,提问作者Roman Nozhenko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 03:09:00