如何清除烧瓶会话?

How do I clear a flask session?

在导入flask的同时,我们导入了session等模块

SecureCookieSession 是一种字典,可以使用会话访问。

现在,我尝试清除我在尝试构建网站时使用的所有垃圾变量。

Whosebug 上的一个答案使用了类似 session.clear() 的命令来清除会话的内容。但是这样的命令报错说没有这样的命令存在

任何人都可以为我指出每次关闭服务器或关闭网站时如何清除 SecureCookieSession 以及如何清除会话吗?

无法进行 clear 会话或任何其他操作。

只需更改 app.config["SECRET_KEY"] 会话字典中的内容就会被删除。

from flask import session

session.clear()

我在 Flask 中使用这样的会话,它确实有效。 虽然我不使用 SecureCookieSession,但也许它可以提供帮助。

您还可以遍历会话并为会话中的每个键调用 session.pop()。 Pop 将从会话中删除变量,您不必继续更新您的密钥。

for key in list(session.keys()):
     session.pop(key)

正如 , as well as in corresponding Flask documentation section 中所指出的,您可以简单地执行以下操作:

from flask import session

session.clear()

不过,正如 alejandro 在评论中指出的那样:

If you are also using flashed messages in your application, you should consider that flashed messages are stored in the session and can, therefore, be erased before they are flashed if you clear the session.

我的建议是利用列表理解:

[session.pop(key) for key in list(session.keys())]

它与 中的 for 循环本质上是相同的,尽管是单行的。我们可以很容易地从 session 中删除所有内容,除了闪烁的消息(或添加任何其他条件),如下所示:

[session.pop(key) for key in list(session.keys()) if key != '_flashes']

作为附加选项,如果您使用 flask_login 包,您只需在请求的上下文中调用 logout_user

logout_user 函数会像其他答案中提到的那样弹出会话密钥,同时还会清除 remember cookie 并强制在 login_manager 中重新加载用户。它还会发送一个 logged-out 信号(如果信号处理在您的应用中很重要)。

from flask_login import logout_user
logout_user()

如果想pop放到g,可以试试:

from flask import g, session

my_value_list = ('sys_info', 'msg')
[setattr(g, s_k, session.pop(s_k)) for s_k in my_value_list if s_k in session.keys()]