【问题标题】:Recognizing the return of a casual user through the Flask user session通过 Flask 用户会话识别临时用户的返回
【发布时间】:2017-06-17 04:18:32
【问题描述】:

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

这将使用户能够返回并发现他们的所有活动都完好无损,即使服务器已重新启动。

因为用户会话

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

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

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

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

而且,由于用户没有登录,我们将通过他们的 user 会话区分不同的用户。

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

【问题讨论】:

    标签: python session flask sqlalchemy


    【解决方案1】:

    根据术语,我假设您使用的是 Flask -

    因此,db.session 不是指“浏览”会话,其日期与单个查看器-ratehr 相关,它指的是该 Web 视图周期唯一的数据库连接会话(而不是浏览session) - 这些是不同的东西。

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

    您正在考虑的“会话”,因为“浏览”会话在 Flask 中不存在开箱即用 - 你要么自己滚动,要么使用插件之一,例如 https://pythonhosted.org/Flask-Session/ - 这是什么与 PHP 的“会话”有关。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-02
      • 1970-01-01
      • 2022-11-16
      • 1970-01-01
      • 1970-01-01
      • 2019-05-22
      • 2017-05-26
      • 1970-01-01
      相关资源
      最近更新 更多