【发布时间】:2010-07-27 01:22:43
【问题描述】:
我正在使用 PHP / MySQL 登录系统。我想给它添加一个记住我。记住我的基本机制是什么?它是否涉及在存储所有用户信息的 MySQL 中的表中添加一个新列等?
提前致谢,
约翰
【问题讨论】:
我正在使用 PHP / MySQL 登录系统。我想给它添加一个记住我。记住我的基本机制是什么?它是否涉及在存储所有用户信息的 MySQL 中的表中添加一个新列等?
提前致谢,
约翰
【问题讨论】:
有几种不同的方法。 secure 方法是将一个字段添加到 mysql 用户表并具有一个“remember_me”散列,它只是生成的随机散列。
哈希值应存储在用户计算机上的 cookie 中以及用于验证目的的用户 ID 中,无论记忆期持续多久(您还应该将数据库中的记住我时间段设置为时间戳以及额外的安全性)。当他们拉起您的网站时,您会看到该 cookie 是否设置,如果是,那么您只需对用户 ID 的哈希进行身份验证。如果验证通过,则视为已登录。如果未通过验证,则将其发送到登录页面/不视为已登录。
这就是我设置大多数网站的方式。痛苦的是,如果他们从另一台计算机登录,那么他们现在不再在他们使用的计算机上进行验证,并且必须重新进行身份验证。但对我来说,安全性比他们因这种情况而不得不再次登录更重要。
编辑: 有关会话/安全性的更多信息,请参阅下面的 cmets。
【讨论】:
是否涉及在 MySQL 中存储所有用户信息的表中添加一个新列等?
不一定。 “记住我”的工作原理是在 cookie 中存储主要用户凭据(通常是他的用户名和密码)或一些设置为在一段时间后过期的临时凭据。如果您使用这些临时代理凭据(通常是长随机字符串),则必须在存储它们的数据库中添加一个表、与它们关联的用户名以及它们的到期时间。
您几乎肯定不希望通过未加密的连接发送这些凭据。您应该将它们存储在安全 cookie 中,即仅通过 HTTPS 发送的 cookie(您还应该通过未加密的连接设置 cookie)。
如果您选择使用安全 cookie 但不想加密所有流量,您可以使用两个 cookie:
然后,当用户访问您的网站但他没有登录时,您检查是否存在不安全的 cookie。如果存在,则将用户重定向到 HTTPS 页面。由于这是安全的,带有用户凭据的安全 cookie 由客户端发送。然后,您继续检查您存储在数据库中的 cookie 的内容并登录用户。
【讨论】:
当有人使用“记住我”设置登录时,生成一个标识符,并将其存储在 cookie 中。
当有人访问您网站上的页面时,请查找 cookie。如果他们有,请在您的数据库中查找它,它应该映射到用户 ID。然后运行任何登录功能,就像他们输入了有效的用户名和密码一样。
【讨论】: