【发布时间】:2017-07-15 19:32:59
【问题描述】:
我有一个登录系统,我希望人们能够保持登录状态。我这样做的方式如下。当用户登录并单击“记住我”时,会创建一个 cookie。 cookie 有以下数据。
email:::randomString
“:::”只是电子邮件和字符串之间的分隔符。一个示例如下所示:
johndow@gmail.com:::EN8borW29qZMMJU8CNKivD91NFa3h5
字符串是随机生成的,不基于用户输入的任何内容。然后使用 bcrypt 对整个数据进行加密并存储在 cookie 中。 然后将该 cookie 上的数据的相同副本存储在 MySQL 表条目中。当用户在另一个会话期间加载页面时,cookie 被读取和解密。然后扫描该表以查找其中包含该电子邮件和该字符串的相同副本。如果是,那么用户会自动登录。由于以下原因,我不确定这是否是一种安全的方法。有人可以从该 cookie 中复制数据,并在他们的 PC 上使用准确的数据创建一个新的。当他们加载页面时,脚本会读取他们的 cookie 并检查数据库以查找匹配项,然后登录用户。
我怎样才能改进这种方法或完全采用一种新方法?
【问题讨论】:
-
您可以添加IP地址,或者使用cookie和本地存储的某种组合。