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

FastAPI中使用SessionMiddleware无法从会话获取变量的问题排查

解决FastAPI SessionMiddleware会话无法持久化的问题

嘿,问题很明显——你在添加SessionMiddleware的时候设置了max_age=0!这个参数控制的是会话Cookie的过期时间(单位是秒),设成0的话,Cookie会立即过期,等你调用/b接口的时候,之前存在会话里的my_var早就跟着失效的Cookie一起没了,自然返回空。

修复方案

把max_age改成一个正数(比如3600,代表1小时过期),或者直接省略这个参数(默认会用浏览器会话时长,也就是关闭浏览器才过期)。修改后的代码如下:

import uvicorn
from fastapi import FastAPI, Request
from starlette.middleware.sessions import SessionMiddleware

app = FastAPI()
# 这里把max_age改为3600秒,也可以直接删掉max_age参数
app.add_middleware(SessionMiddleware, secret_key="some-random-string", max_age=3600)

@app.get("/a")
async def session_set(request: Request):
    request.session["my_var"] = "1234"
    return 'ok'

@app.get("/b")
async def session_info(request: Request):
    my_var = request.session.get("my_var", None)
    return my_var

if __name__ == '__main__':
    uvicorn.run('http-session:app', port=5000, reload=True)

额外注意事项

  • 测试时要保证用同一个请求上下文调用/a和/b:比如用同一个浏览器窗口,或者用HTTP客户端(比如requests)时要保存Cookie(可以用requests.Session()来维持会话)。
  • 生产环境里secret_key一定要用安全的随机字符串,别用示例里的"some-random-string",可以用Python的secrets.token_hex(32)生成一个靠谱的密钥。

内容的提问来源于stack exchange,提问作者28 Lucky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 16:34:07