首页 > 解决方案 > Flask 的 SessionInterface 中的 get_cookie_name 之类的东西?

问题描述

我需要根据用户在我的 Flask 应用程序中访问的 url 的子路径使用不同的会话

例如,我希望访问 www.example.com 的用户具有基于名为“root_cookie”的 cookie 的会话,但访问 www.example.com/subpath 的用户应该具有基于名为“subpath_cookie”的 cookie 的会话

对我来说,这主要与 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 名称可以解决问题。但我不能,因为get_cookie_name()不存在。

Flask 中是否有任何我缺少的机制可以帮助解决这个问题?

标签: flaskflask-login

解决方案


save_session()在对必须重写来解决我的问题感到不满意之后,我提交了一个拉取请求以在 Flask 项目中创建一个get_cookie_name()方法,该方法已合并到主分支中。从 Flask 版本 2.0.0 起,将能够按照文档使用此新功能:https ://flask.palletsprojects.com/en/master/api/#flask.sessions.SessionInterface.get_cookie_name


推荐阅读