2

所以通常在我使用的大型网站中,您希望将一些会话信息保存到数据库中,这样 cookie 就不会被轻易复制。

使用flask-login 有一种使用token_loader 的方法,可以实现查询会话表的功能,例如将令牌映射到id。

但这意味着会话表将与用户表大小相同。

id = db.Column(db.Integer, primary_key=True)
token = db.Column(db.String(250), unique=True)
uid = db.Column(db.Integer, unique=True)


@login_manager.token_loader
def token_load(token):
    return User.sessions.first().token

我见过有 8 MB 的充满用户表信息的网站。例如,站点会被 Drupal 中的会话表行阻塞。以这种方式存储令牌是否明智?每个用户只需要一行告诉我们他们的代币价值吗?

基本上,它就像一个密码表,用于识别拥有 cookie 而不是实际登录的用户。

有人在烧瓶登录的任何地方看到过这个实现吗?

4

2 回答 2

1

我只会使用用户表中的附加字段。这将避免数据在另一个表中重复。如果您只在其中保存 ID 和令牌,我认为没有任何意义。但是,如果您打算向其添加更多信息(例如创建令牌的时间,其他一些更安全的内容并稍后验证令牌,生成令牌的 IP 地址或其他),那么您当然可以将需要单独的表。我的 2c :)

于 2012-12-02T07:40:15.090 回答
0

我想你可能把事情复杂化了。如果您想使用存储在服务器端而不是 cookie 中的会话,您还可以使用 redis 之类的东西来存储会话。您所要做的就是使用以下示例编写自己的会话接口:

http://flask.pocoo.org/snippets/75/

现在,如果您想在 365 天内使用“记住我”,那么只需在您的烧瓶应用程序中执行此操作

from datetime import timedelta
app.secret_key = 'some secret random string'
session.permanent = True
app.permanent_session_lifetime = timedelta(days=365)
于 2012-12-03T17:14:22.513 回答