如何在Flask中存储用户的会话数据?

时间:2017-07-17 21:17:21

标签: python mongodb flask

我正在创建一个Flask应用程序,该应用程序要求每个请求使用用户已传递给应用程序的一些数据来初始化其会话。一旦他们传递了这些数据并初始化了会话,我想反复使用这些数据,直到他们的会话完成填充请求,而不必为每个请求传递数据。

我似乎无法找到最佳方法。将它存储在会话变量中不起作用,因为该数据只是被发送回用户,然后就像每个请求传递它一样。将数据存储在数据库中似乎不是正确的选择,因为我需要在会话结束时将其丢弃,并且我没有看到任何装饰器在会话到期时实现...所以我是害怕我的数据库最终会填满所有这些来自初始化的数据,并且无法保证在会话结束时删除它们。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

这里有两个选项:存储在客户端上的会话,或存储在服务器上的会话。

要将其存储在服务器上,您需要一个数据存储。如果您的应用程序必须扩展到任何程度(包括多个uwsgi工作者),您将不得不使用分布式存储。如果你有redis,那将是最好的选择。请参阅Simon Fraser在评论中发布的Flask-Session示例。它将处理在数据库中存储会话对象并在需要时从中获取值。它也可以处理大量的后端,因此无论您拥有什么数据库,都可以使用它开箱即用。

如果您不想使用后端会话,则必须使用客户端会话。这是通过设置cookie来完成的 - cookie会自动附加到浏览器发送到您网站的大多数请求中,因此您存储在cookie上的值通常会返回给您。 (这就是facebook如果没有你登录每一页就记得你是谁。实际上,这就是Flask-Session如何跟踪要恢复的WHICH会话!)。为了使其可靠,您必须对cookie进行签名,以便用户无法修改值 - Flask可以使用内置的Session为您处理此问题,或者您可以使用更好的加密库正如Here所述。如果您不希望用户能够看到这些值,或者您要存储大量数据(cookie的最大大小有限),则必须使用所有服务器端版本这个。