FastAPI中SessionMiddleware的lang会话变量仅生效一次无法更新问题排查
问题原因及解决方案
核心原因:自定义中间件破坏了会话更新逻辑
你添加的some_middleware会在响应阶段,把session cookie的值强制设置为请求中携带的旧会话值。而FastAPI的SessionMiddleware原本会在你修改request.session(比如在/language路由更新lang)后,生成包含新数据的会话值并自动设置到响应cookie里。这个自定义中间件的操作直接覆盖了SessionMiddleware的正常工作,导致新的会话数据无法同步到客户端,所以后续请求读取的始终是第一次设置的旧lang值。
另外,SessionMiddleware本身已经默认处理了httponly属性,你完全不需要手动再设置这个cookie。
解决方案
直接删除这个自定义的some_middleware即可,修改后的应用配置代码如下:
app.add_middleware(SessionMiddleware, secret_key="some-random-string-135489") app.mount("/static", StaticFiles(directory="static"), name="static")
删除后,SessionMiddleware会自动处理会话数据的更新和cookie的设置,后续修改lang值就能正常生效了。
内容的提问来源于stack exchange,提问作者Tomas Am
相关产品推荐
相关产品推荐

