【问题标题】:Basics of a remember-me system记住我系统的基础知识
【发布时间】:2010-07-27 01:22:43
【问题描述】:

我正在使用 PHP / MySQL 登录系统。我想给它添加一个记住我。记住我的基本机制是什么?它是否涉及在存储所有用户信息的 MySQL 中的表中添加一个新列等?

提前致谢,

约翰

【问题讨论】:

    标签: php mysql


    【解决方案1】:

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

    哈希值应存储在用户计算机上的 cookie 中以及用于验证目的的用户 ID 中,无论记忆期持续多久(您还应该将数据库中的记住我时间段设置为时间戳以及额外的安全性)。当他们拉起您的网站时,您会看到该 cookie 是否设置,如果是,那么您只需对用户 ID 的哈希进行身份验证。如果验证通过,则视为已登录。如果未通过验证,则将其发送到登录页面/不视为已登录。

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

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

    【讨论】:

    • 如果安全性很重要,我希望您生成的哈希值是不可预测的,并且您不会通过未加密的连接发送它。而且,如果登录另一台计算机导致您首先注销……您的解决方案中的某些问题并不理想。
    • 对,这并没有过多地涉及安全细节。对不起,我应该指定的。散列应该使用盐随机生成,并且以独特方式的日期可能就足够了。如果安全很重要,通过安全连接发送 cookie 将是最安全的方法。至于在单独的计算机上注销,是的,它不是最理想的,但同时它确实增加了一个安全层,因为如果他们切换计算机,它将使他们更频繁地重新验证。这意味着一个意外的会话(学校)被终止了。
    • 更好的方案是为记住我提供一个表格并允许用户进行多个会话。然后,当用户登录时,提醒他们“您还有 2 个其他活动会话”并允许他们终止其他会话,而不是自动执行此操作。我可能会切换我的系统来执行此操作,我喜欢我的想法!
    【解决方案2】:

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

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

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

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-21
        • 1970-01-01
        • 1970-01-01
        • 2014-04-16
        • 2018-05-25
        • 2014-11-28
        • 2014-02-14
        • 2023-04-10
        相关资源
        最近更新 更多