通过Flask用户会话识别临时用户的返回

时间:2017-01-31 16:26:33

标签: python session flask sqlalchemy

考虑一个网站,它会在磁盘上保留其用户的活动,而不需要他们登录/验证。

即使服务器已重新启动,这也可以让用户返回并查找所有活动,即使服务器已重新启动。

因为用户会话

from Flask import session
session['foo'] = 'bar'

是一个普通的词典,我假设它在服务器停止并重新启动时被擦除。因此,如果用户的两次访问跨服务器重新启动,则不会持久。

要使用Flask,我们将使用数据库会话

from flask.ext.sqlalchemy import SQLAlchemy
db = SQLAlchemy()
db.session.add(..)
db.session.commit()

并且,由于用户未登录,我们会通过用户会话区分不同的用户。

可以从用户会话中提取以在数据库会话中保留的唯一ID是什么?这个想法是,当用户返回时,浏览器中的cookie将唯一地标识它们,这反过来意味着我们从用户会话中散列的标识符将保持不变。

1 个答案:

答案 0 :(得分:1)

从术语我假设您使用的是烧瓶 -

因此,db.session并未引用"浏览"会话,与单个viewer-ratehr相关的日期,它指的是对于该Web视图周期(而不是浏览会话)唯一的数据库连接会话 - 这些是不同的事情。

因此,上面的代码以永久,独特的方式将您的对象持久保存在数据库中。如果在重新启动Flask应用程序时无法看到它们,那一定是因为您使用的是瞬态数据库。只需调整配置以使用永久磁盘数据库,而不是内存中的sqlite实例,或每次重新创建的docker容器内的数据库。

"会话"你正在思考,浏览" Flask中没有开箱即用的会话 - 您要么自己滚动,要么使用其中一个插件,例如https://pythonhosted.org/Flask-Session/ - 这与PHP"会话& #34;