我有这个密码。我需要在session_set
中创建用于身份验证的会话。但由于某些原因,会话仍在session_info
端点中创建。如何创建仅在session_set
中创建的会话?否则,对于响应中的每个请求会话,我都有一个新会话。请帮帮我
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)
1条答案
按热度按时间eivnm1vs1#
您可以在每次新请求到达时使用Middleware覆盖
Response
cookies中的session
值(也请查看Starlette中的文档);因此,session
将保持不变。注意:记住在将
SessionMiddleware
添加到app
示例之后声明您的自定义中间件,因为在您的应用程序中定义端点/子应用程序的顺序很重要,如here所述(请参阅FastAPI文档)。工作示例: