我想将cookie的密钥与数据库中的密钥进行比较,以便让返回的访问者自动登录该站点,这意味着db和cookie中的密钥将与特定用户相关联
我的问题是什么更好,将密钥存储到存储用户名的表中 使用他们的密码,或创建一个单独的表,当然会有用户名和相关的密钥和时间戳。
复杂性在这里是一个问题 - 此外我试图找到一个if innodb或Isam更适合上述。
使问题复杂化的是,从现在开始难以投射的事实 应用程序的大小以及它可能如何影响数据库的设计。 我越早找到一个更好的解决方案
答案 0 :(得分:2)
我将就如何处理这个问题提出一些想法和想法。
现在,在执行此操作时应首先考虑的是其他网站如何执行此操作:
因此,您可以看到许多网站不仅允许持久登录来控制其用户交互,实际上返回的持久登录甚至很少会完全记录一个人。相反,大多数网站实施的是2层登录系统,您可以将其视为cookie用户,但无需再次登录就无法编辑任何内容。
你会立刻注意到这里的事情。许多这些网站仅在浏览器会话到期时不关心cookie过期。持久性cookie很少有短期到期,所以这一点是没用的。正如@pyruva所说,很容易窃取某人的cookie并查看网站,这种情况一直发生在Facebook上(你甚至可以找到关于如何做的视频教程)。
所以首先要记住的是,持久登录本质上是不安全的。通过实现诸如2层认证系统之类的东西,使其安全的方式通常在您的应用程序逻辑中。
您永远不应该做的一件事是在该cookie中存储一些有关用户的个人身份信息,例如用户名或密码,即使是以散列形式。更好的方法是使用随机生成的令牌(在此考虑OAuth2)最初与服务器握手。
当然,您需要考虑的另一件事是保护您的Cookie。您可以在Google上找到关于此的大量资源,但这里有一个应该有用的链接:http://www.codinghorror.com/blog/2008/08/protecting-your-cookies-httponly.html
所以希望这应该给你一些方向和暗示如何解决这个问题。
每个访问您网站的用户在Cookie方面实际上都有两个会话。他们有一个浏览器会话,当浏览器关闭时,它将从浏览器中删除cookie(通常在HTTP头中表示为0到期时间)。
然后是持久会话。您现在要实施的那个,其中cookie可以在它们实际到期之前持续数年。
这就是我对浏览器过期的意思。因此,大多数网站都会存放临时cookie,一旦您关闭浏览器就会删除它们。这些cookie通常用于保存您的会话。
如果网站关注Cookie过期,那么他们就不会在您的计算机上存放有效期为2年的Cookie。如果有人要使用过期的cookie来滥用你的帐户,我们就要面对它们,因为cookie仍然完全有效,所以它们运气不好。这是一个更大的安全威胁,但它确实证明了我的观点。