Php 持久登录的db方案

Php 持久登录的db方案,php,Php,我想将cookie的密钥与数据库中找到的密钥进行比较,以便让返回的访问者自动登录站点,这意味着数据库中的密钥和cookie将与特定用户关联 我的问题是,将密钥存储到存储用户名的表中更好 使用他们的密码,或者创建一个单独的表,当然会有带有相关密钥和时间戳的用户名 复杂性是这里的一个问题,此外,我试图找到一个答案,如果innodb或Isam更适合上述情况 使事情更加复杂的是,从现在开始很难预测 应用程序将有多大,以及这将如何影响数据库的设计。 越早找到一个合理的解决方案越好我将用一些想法和想法来回答

我想将cookie的密钥与数据库中找到的密钥进行比较,以便让返回的访问者自动登录站点,这意味着数据库中的密钥和cookie将与特定用户关联

我的问题是,将密钥存储到存储用户名的表中更好 使用他们的密码,或者创建一个单独的表,当然会有带有相关密钥和时间戳的用户名

复杂性是这里的一个问题,此外,我试图找到一个答案,如果innodb或Isam更适合上述情况

使事情更加复杂的是,从现在开始很难预测 应用程序将有多大,以及这将如何影响数据库的设计。
越早找到一个合理的解决方案越好

我将用一些想法和想法来回答这个问题

现在当你这样做的时候,你首先要考虑的是其他站点如何做:

  • Amazon允许您在持久cookie下浏览站点,但是他们不允许在不强制再次登录的情况下下单或更改详细信息。尽管如此,这仍然有一个严重的安全漏洞。如果你允许一次点击订购,然后其他人使用你的电脑并点击来自亚马逊的活动电子邮件中的链接(例如广告),那么订单仍有可能被放到其他人的帐户上,而无需实际登录(是的,谢天谢地,我偶然发现了这一点)
  • Facebook与亚马逊采取了类似的做法。根据个人经验,我认为他们要求每两天重新登录一次,以编辑帐户详细信息等
  • 据我所知,Stackoverflow没有这样的安全措施。一旦您登录,您将在指定的时间内登录
  • 谷歌有一个2年以上的cookie,大约每周一次让你重新登录以验证你自己
因此,正如您所看到的,许多站点不仅允许持久登录来控制其用户交互,实际上,返回的持久登录甚至可以完全登录用户。相反,大多数站点实现的是一个两层登录系统,在该系统中,您可以以cookie用户的身份查看站点,但是您不必再次登录就无法编辑任何内容

你会立即注意到这里的一件事。这些站点中的许多不关心cookie过期,只关心浏览器会话过期。持久性cookie很少有短期过期,所以这一点是无用的。正如@pyruva所说,偷别人的cookie并以他们的身份查看网站是很容易的,这种情况在Facebook上经常发生(你甚至可以找到如何做的视频教程)

所以首先要记住的是,持久登录本质上是不安全的。使其安全的方法通常是在应用程序逻辑中实现一些东西,例如2层身份验证系统

你永远不应该做的一件事就是在cookie中存储一些关于用户的个人识别信息,比如用户名或密码,甚至是散列形式。更好的方法是使用随机生成的令牌(这里考虑OAuth2)最初与服务器握手

当然,还有一件事你需要考虑的是保护你的饼干。你可以在谷歌上找到很多关于这方面的资源,但是这里有一个链接应该会很有帮助:

所以希望这能给你一些方向和提示来解决这个问题

编辑 当涉及cookie时,每个访问您站点的用户实际上都有两个会话。他们有一个浏览器会话,当浏览器关闭时,该会话将从浏览器中删除cookie(通常在HTTP头中表示为0过期时间)

然后是持久会话。您现在要实现的一个,cookie可以在实际过期之前持续数年

这就是我所说的浏览器过期。因此,大多数网站都有临时cookie,一旦关闭浏览器,这些cookie将被删除。这些cookies通常用于保持您的会话


如果网站关心cookie过期,那么他们不会在你的计算机上存放有效期为2年的cookie。让我们面对现实吧,如果有人要使用过期的cookies来滥用你的帐户,他们有点运气不好,因为cookies仍然是完全有效的。这是一个更大的安全威胁,但它确实证明了我的观点。

只需将用户名/密码存储在cookie中,并在db中使用用户名/密码进行检查。为什么要创建另一列/表@BhuvanRikka不要将密码存储在cookie中!好的,那么用户名就是fine了。也许你可以在cookie中存储用户名的哈希值,并在用户访问你的站点时进行检查。通常一个合理的方法是存储一个随机生成的令牌,并将其与用户行一起存储。在用户返回上比较两者。注意cookie劫持,你需要与之斗争,一个好的起点是:是的,你的帖子非常有用。我可以问很多问题……但我将集中在一个问题上(现在对于其他问题,我可能会发布其他更具体的问题)。您说过,您上面提到的许多站点不关心cookie过期,只关心浏览器会话过期。这个,我不明白。你能详细说明一下吗?为什么这些站点不关心cookie过期,因为据我所知,这些站点使用的都是持久cookie。@DimitrisPapageorgiou Ok添加了一点编辑,希望能够清除这些内容Ok,我完全理解会话cookie和持久登录cookie的区别。我想把重点放在你的最后一段。过期的cookie(我假设你在这里指的是持久cookie)如何有效?你说持久的cookies是一种威胁。那么,如果像你说的那样构成威胁,它是如何和一些网站使用2年cookie的呢?“我错过了一些东西。”DimitrisPapageorgiou饼干必须被归类为过期饼干