我需要根据用户在我的Flask应用程序中访问的URL的子路径使用不同的会话
例如,我希望访问www.example.com的用户具有基于名为“ root_cookie”的cookie的会话,但是访问www.example.com/subpath的用户应具有基于名为“ subpath_cookie”的cookie的会话< / p>
对我来说,这主要与Flask-Login有关,以及我希望如何根据用户登录的子路径设置不同的独立登录会话。
现在,Flask的session_interface
属性允许您设置自定义类,您可以从SessionInterface
中继承该类。
可以覆盖SessionInterface
中的几乎所有内容,包括cookie的域(get_cookie_domain()
)和cookie的路径(get_cookie_path()
),真是太好了。
我缺少的一件事是可以命名为get_cookie_name()
的函数,由于上述原因,该函数将有助于重写。
我意识到也许我可以重写get_cookie_path()
来为每个子路径设置一个不同的cookie。问题出现在根URL中。如果我将cookie的路径设置为“ /”,它也会在子路径中生效,包括那些我要使用其他会话的路径。因此,如果将其作为根URL,则设置不同的Cookie名称即可解决问题。
Flask中是否缺少任何机制可以帮助解决此问题?
答案 0 :(得分:0)
您可以签出Response.set_cookie()方法,以在其中传递Cookie名称。可以在Flask的 SecureCookieSessionInterface 中找到示例:
response.set_cookie(
app.session_cookie_name, # Substitute this with desired name.
val,
expires=expires,
httponly=httponly,
domain=domain,
path=path,
secure=secure,
samesite=samesite
)
由于要基于端点设置名称,因此可能需要根据文档提供的请求对象:
对于在请求结束时由open_session()返回的实际会话调用此方法。在请求上下文中仍会调用此方法,因此,如果您绝对需要访问请求,则可以执行此操作。
答案 1 :(得分:0)
对必须重写save_session()
来解决问题感到不满意之后,我提交了一个pull request以在Flask项目中创建一个get_cookie_name()
方法,该方法已合并到master分支中。从Flask的2.0.0版本开始,您将能够按照以下文档使用此新功能:https://flask.palletsprojects.com/en/master/api/#flask.sessions.SessionInterface.get_cookie_name