我试图通过会话进行基本授权,下面是一个示例代码
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=0)
@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)
设置了session
,一切都很好,但是session_info
端点返回一个空字典。你能解释一下我做错了什么吗?
发布于 2022-09-29 13:18:20
根据Starlette documentation on SessionMiddleware
max_age
-会话到期时间以秒为单位。默认为2周。如果设置为None
,则cookie将持续到浏览器会话.。
same_site
- SameSite标志阻止浏览器发送会话cookie和跨站点请求。默认为'lax'
.https_only
--指示应该设置安全标志(只能与HTTPS一起使用)。默认为False
.因此,使用max_age=0
只会导致session
cookie立即过期。您可以在调用max_age
函数时删除app.add_middleware()
,或者根据需要对其进行调整。此外,您还可以考虑调整same_site
和https_only
标志,以便为session
cookie提供一些保护。
https://stackoverflow.com/questions/73895821
复制相似问题