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

FastAPI中间件中如何更新Request的session?

FastAPI中间件中如何更新Request的session?

嘿,我懂你碰到的问题了!你现在的代码是先调用call_next(request)处理完请求,再去修改request.session,这其实踩了个常见的坑——FastAPI的session处理逻辑是在请求被路由处理的阶段完成的,等你执行完await call_next(request),后续视图函数已经用原来的session处理完请求了,这时候再改session,不仅不会影响这次请求,修改的内容也不会被框架保存下来。

咱们调整下操作顺序就好:先修改session,再调用call_next,这样后续的路由代码能拿到更新后的session,而且修改的内容也会被正确持久化。

把你的代码改成这样试试:

@app.middleware("http")
async def renewal_token(request: Request, call_next):
    now = datetime.now()
    expire = now + timedelta(minutes=30)
    session_id = request.session["session_id"]
    
    # 先更新session,再让后续流程处理请求
    request.session["token_expiry"] = expire.timestamp()
    
    response = await call_next(request)
    response.set_cookie(key="Authorization", value=session_id, expires=expire.replace(tzinfo=timezone.utc))
    return response

你之前试的request.session.clear()后再赋值没用,也是同样的原因——操作时机太晚了,session已经在call_next的流程里被处理完毕,后续的修改根本不会生效。

核心要点就是:在中间件里修改request.session,一定要把修改操作放在await call_next(request)之前,这样才能让后续请求环节感知到session的变化,同时保证修改被框架正确保存。

备注:内容来源于stack exchange,提问作者Mohammad Pourbehzad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 13:28:05