因此,通常在我使用的大型网站中,您希望将一些会话信息保存到数据库中,这样就不会轻易复制cookie。
使用flask-login,有一种方法可以使用token_loader来实现查询Session表的函数,例如,将令牌映射到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而不是实际登录的用户。
有人在烧瓶登录的任何地方看到了这个实现吗?
答案 0 :(得分:1)
我会使用Users表中的附加字段。这将避免数据在另一个表中重复。如果你只在那里保存ID和令牌,我认为没有任何要点有单独的表。但是如果你打算向它添加一些更多的信息(比如创建令牌的时候,其他一些东西要更安全并稍后验证令牌,那么令牌中的IP地址就会被生成或者其他的),当然你将需要单独的表。我的2c:)
答案 1 :(得分: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)