Php 记忆我系统的基础知识

Php 记忆我系统的基础知识,php,mysql,Php,Mysql,我使用的是PHP/MySQL登录系统。我想加上一句“记住我”。“记住我”的基本原理是什么?它是否涉及到在MySQL中向存储所有用户信息的表中添加一个新列,等等 提前感谢, 约翰有几种不同的方法。一种安全的方法是向mysql用户表中添加一个字段,并生成一个“remember_me”散列,它只是一个随机生成的散列 哈希值应存储在用户计算机上的cookie中,以及用于验证的userid中,无论记忆周期持续多长(为了额外的安全性,您还应将数据库中的memberme周期设置为时间戳)。当他们调出你的站点时

我使用的是PHP/MySQL登录系统。我想加上一句“记住我”。“记住我”的基本原理是什么?它是否涉及到在MySQL中向存储所有用户信息的表中添加一个新列,等等

提前感谢,


约翰

有几种不同的方法。一种安全的方法是向mysql用户表中添加一个字段,并生成一个“remember_me”散列,它只是一个随机生成的散列

哈希值应存储在用户计算机上的cookie中,以及用于验证的userid中,无论记忆周期持续多长(为了额外的安全性,您还应将数据库中的memberme周期设置为时间戳)。当他们调出你的站点时,你会看到cookie是否已设置,如果已设置,那么你只需向用户ID验证哈希。如果验证,则认为他们已登录。如果未验证,则将其发送到登录页面/它们被视为未登录

这就是我设置大多数网站的方式。痛苦的是,如果他们从另一台计算机登录,那么他们现在不再在他们使用的计算机上验证,并且将不得不重新验证。但对我来说,安全性比他们不得不再次登录更重要

编辑: 有关会话/安全性的更多信息,请参阅下面的评论

它是否涉及到在MySQL中向存储所有用户信息的表中添加一个新列,等等

不一定。“记住我”的工作原理是将主要用户凭据(通常是他的用户名和密码)或一些设置为在一段时间后过期的临时凭据存储在cookie中。如果使用这些临时代理凭据(通常是长的随机字符串),则必须在数据库中添加一个表来存储它们、与它们关联的用户名以及它们的过期时间

您几乎肯定不希望通过未加密的连接发送这些凭据。您应该将它们存储在安全cookie中,即仅通过HTTPS发送的cookie(您还应该通过未加密的连接设置cookie)

如果您选择使用安全cookie,但不想加密所有流量,则可以使用两个cookie:

  • 一个不安全的cookie,它只向服务器发出信号,表明您有一个带有凭据的安全cookie
  • 具有凭据本身的安全cookie

然后,当用户访问您的站点并且他没有登录时,您检查是否存在不安全的cookie。如果存在,则将用户重定向到HTTPS页面。由于这是安全的,因此客户端将发送带有用户凭据的安全cookie。然后,您继续检查存储在数据库中的cookie内容,并登录用户。

当有人使用“记住我”设置登录时,生成一个标识符,并将其存储在cookie上


当有人访问您网站上的某个页面时,请查找cookie。如果他们有一个,在数据库中查找它,它应该映射到一个用户ID。然后运行任何登录功能,就像他们输入了有效的用户名和密码一样。

如果安全性很重要,我希望您是在不可预测的情况下生成哈希,并且不要通过未加密的连接发送哈希。如果登录到另一台计算机会让你在第一时间注销。。。在你的解决方案中有些地方是次优的。对,这不会涉及太多的细节。对不起,我应该指定的。散列应该随机生成一个salt和一个日期,以一种独特的方式可能就足够了。如果安全性很重要,那么通过安全连接发送cookie将是最安全的方法。至于在单独的计算机上注销,是的,这是次优的,但同时它确实添加了一个安全层,如果他们切换计算机,这将使他们更频繁地重新验证。这意味着意外打开的会话(学校)被终止。更好的方案是为“记住我”设置一个表,并允许用户进行多个会话。然后,当用户登录时,提醒他们“您还有2个活动会话”,并允许他们终止其他会话,而不是自动终止。我可能会改变我的系统去做,我喜欢我的想法!