Flask: 'session'与'g'之间的区别?

70

我试图理解 gsession 之间在功能和目的上的区别。它们都是用来存储会话数据的对象,是吗?如果是这样的话,它们的区别是什么,我应该在什么情况下使用其中的哪一个呢?

1个回答

102
不,g不是一个用于挂载会话数据的对象。g数据在请求之间不持久化。 session 提供了一个存储数据的位置,以每个特定的浏览器为单位。作为 Flask 应用程序的用户,在特定浏览器中使用更多的请求,会话数据会在这些请求之间传递。
另一方面,g是在一个请求周期内不同代码部分之间共享的数据。可以在before_request钩子期间设置g,并且在teardown_request阶段仍然可用。一旦请求完成并发送给客户端,g就会被清除。

17
所以 session 是“每个客户端”的数据(基于 cookie?),而 g 是每个请求的数据? - Aviv Cohn
18
@AvivCohn: 正是如此。使用 g 的好处在于它存在于您的所有请求中,是线程安全的,并且针对当前应用程序特定(如果您要嵌套 Flask 应用程序,在一个应用程序调用另一个应用程序时这一点变得很重要)。因此,您可以使用 before_request 钩子设置用户对象或数据库连接,然后在模板中访问相同的用户或连接,并在拆卸钩子中仍然可用,而无需将其传递给每个调用。 - Martijn Pieters

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接