我应该在`g`或`session`上存储登录的用户数据吗?

问题描述 投票:-1回答:2

我正在阅读this part on logins from a Flask tutorial.在这个例子中,作者将用户对象存储在g全局上。

他为什么这样做?将登录的用户数据存储在session全局上是不是更有意义?我不应该使用session来存储有关登录用户的数据吗?

python session flask
2个回答
0
投票

不,做你描述的事情是没有意义的。 Flask-Login会在会话中存储用户信息:它存储用户ID,以便在每个请求中加载完整用户。

如果您只是将用户数据存储在会话中,那么如果用户有两个以上的浏览器会话,或者某些更改用户数据发生在用户控制范围之外,它就会失去同步。

您将User实例传递给Flask-Login的login_user函数,它将用户的id存储在session中。当下一个请求进入时,它将使用此存储的id调用user_loader以再次检索用户实例。该实例在请求期间存储在g中。


-1
投票

理论上,sessiong可以用于存储登录用户。

在Flask-Login中,session cookie的主要用途是跟踪用户ID。 Flask-Login会在g中的请求期间完成剩下的工作以获取和存储用户对象。

gsession更灵活。添加到session的任何内容都必须是JSON可序列化的。 g是一个Python对象,因此任何数据(包括对象甚至函数)都可以分配给它(g.userg.some_function()等)并在请求期间使用。

默认情况下,存储在session中的所有数据都存储在由ItsDangerous安全签名的浏览器cookie中。每次请求时,浏览器都会将cookie发送到服务器。有权访问用户连接的任何人都可以截取并读取其中的数据,但由于签名,他们无法更改。

相反,g仅在每个请求期间存储在服务器内存中。用户或其他人不会看到任何数据。但是,它不是持久的,必须为每个请求重新创建。 session cookie保留了跨请求的数据。

© www.soinside.com 2019 - 2024. All rights reserved.