Python 在数据库中保存flask登录时是否记得我?

Python 在数据库中保存flask登录时是否记得我?,python,cryptography,flask,flask-login,Python,Cryptography,Flask,Flask Login,因此,通常在我工作的大型网站中,您希望将一些会话信息保存到数据库中,这样cookies就不容易被复制 使用flask login,可以使用token_loader实现一个查询会话表的功能,例如,将token映射到id 但这意味着会话表将与用户表大小相同 id = db.Column(db.Integer, primary_key=True) token = db.Column(db.String(250), unique=True) uid = db.Column(db.Integer, uni

因此,通常在我工作的大型网站中,您希望将一些会话信息保存到数据库中,这样cookies就不容易被复制

使用flask login,可以使用token_loader实现一个查询会话表的功能,例如,将token映射到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
我见过有8MB用户表信息的站点。例如,在Drupal中,站点被会话表行阻塞。以这种方式存储代币是否明智?每个用户只需一行,告诉我们他们的令牌值

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


有人在flask login的任何地方看到过这个实现吗?

我只想使用Users表中的附加字段。这将避免数据在另一个表中重复。如果您只保存ID和令牌,我看不出使用单独的表有任何意义。但是,如果您计划向其中添加更多信息(例如创建令牌的时间、其他更安全的内容以及稍后验证令牌、生成令牌的ip地址或smth其他),那么您当然需要单独的表。My 2c:)

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

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

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

from datetime import timedelta
app.secret_key = 'some secret random string'
session.permanent = True
app.permanent_session_lifetime = timedelta(days=365)

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

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

from datetime import timedelta
app.secret_key = 'some secret random string'
session.permanent = True
app.permanent_session_lifetime = timedelta(days=365)

我不确定我是否理解这个问题,但如果是关于为用户保存令牌信息,那么。。。您可以将令牌保存到同一个users表中,在该表中您已经有了令牌的ID。这只是一个额外的字段。或者可以是用户配置文件表,或者。。。然后是的,带映射的独立表(如果出于某种安全考虑,您希望将users表与此数据分离,那么我想您没有其他选择)。如果我误解了这个问题——对不起:)是的,我只是在问最好的方法。我的意思是,我甚至不确定这是否是100%安全的,如果我们所做的只是在cookie中添加一个哈希,然后检查哈希是否与用户匹配。本质上,一旦黑客得到你的散列,他就可以以你的身份登录(这是一种安全措施吗?)我不确定我是否理解这个问题,但如果是关于为用户保存令牌信息,那么。。。您可以将令牌保存到同一个users表中,在该表中您已经有了令牌的ID。这只是一个额外的字段。或者可以是用户配置文件表,或者。。。然后是的,带映射的独立表(如果出于某种安全考虑,您希望将users表与此数据分离,那么我想您没有其他选择)。如果我误解了这个问题——对不起:)是的,我只是在问最好的方法。我的意思是,我甚至不确定这是否是100%安全的,如果我们所做的只是在cookie中添加一个哈希,然后检查哈希是否与用户匹配。本质上,一旦黑客得到了你的哈希,他就可以以你的身份登录(这在很大程度上是一种安全性吗?),但是做一些像ip/令牌验证这样的事情,真的可以提高安全性吗?如果你的令牌是短期的(分钟、小时),我会说是的。但是,如果您希望用户在几天后自动登录,那么IP地址就没有意义了,只有cookie中的哈希值才有帮助。无论如何,我认为值得存储的是您为用户颁发令牌的时间。我认为它是值得有可能要求重新登录,如果例如令牌是2个月前。。。或者如果用户在一个月内从未使用过令牌。无论如何,如果饼干被偷了——安全故事的结尾:黛雅,这是我担心的。我的意思是“记住我”cookie的全部目的就是要记住用户365天。如果是这样,那么威胁是什么?1.他们偷了你的饼干,然后不管你放了什么,它都不安全。2.他们复制了您拥有的cookie,但如果您将其散列,则无法复制。3.他们通过wifi嗅探您的cookie,在这种情况下,您需要解密cookie并对cookie进行IP检查,但是用户必须重新登录每个IP更改。(这可能就是银行从不通过cookies登录用户的原因)。但ip/令牌验证之类的事情真的能提高安全性吗?如果您的令牌是短期(分钟、小时)的,我会说是的。但是,如果您希望用户在几天后自动登录,那么IP地址就没有意义了,只有cookie中的哈希值才有帮助。无论如何,我认为值得存储的是您为用户颁发令牌的时间。我认为它是值得有可能要求重新登录,如果例如令牌是2个月前。。。或者如果用户在一个月内从未使用过令牌。无论如何,如果饼干被偷了——安全故事的结尾:黛雅,这是我担心的。我的意思是“记住我”cookie的全部目的就是要记住用户365天。如果是这样,那是什么