首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >FastAPI/Starlette的SessionMiddleware为每个请求创建新的会话

FastAPI/Starlette的SessionMiddleware为每个请求创建新的会话
EN

Stack Overflow用户
提问于 2022-09-29 14:43:24
回答 1查看 732关注 0票数 1

我需要在session_set端点中创建一个用于身份验证的会话。但是,由于某种原因,会话仍在session_info端点中创建。如何使仅在session_set中创建的会话?否则,我将在每一次请求的响应中有一个新的会议。

这是我的代码:

代码语言:javascript
运行
复制
import uvicorn
from fastapi import FastAPI, Request
from starlette.middleware.sessions import SessionMiddleware

app = FastAPI()
app.add_middleware(SessionMiddleware, secret_key="some-random-string", max_age=None)


@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)

EN

回答 1

Stack Overflow用户

发布于 2022-10-02 08:17:57

您可以在每次新请求到达时使用中间件覆盖曲奇饼中的session值(也检查Starlette文件 );因此,session将保持不变。

注意:记得在将SessionMiddleware添加到app实例之后声明您的自定义中间件,这是在应用程序matters中定义端点/子应用程序的顺序,如这个答案中所描述的那样(参见相关的FastAPI文档 )。

工作实例:

代码语言:javascript
运行
复制
from fastapi import FastAPI, Request
from starlette.middleware.sessions import SessionMiddleware

app = FastAPI()
app.add_middleware(SessionMiddleware, secret_key="some-random-string")

@app.middleware("http")
async def some_middleware(request: Request, call_next):
    response = await call_next(request)
    session = request.cookies.get('session')
    if session:
        response.set_cookie(key='session', value=request.cookies.get('session'), httponly=True)
    return response
 
@app.get("/a")
def func_a(request: Request):
    request.session["my_var"] = "1234"
    print(request.cookies.get('session'))
    return 'OK'

@app.get("/b")
def func_b(request: Request):
    my_var = request.session.get("my_var", None)
    print(request.cookies.get('session'))
    return my_var
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73897479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档