Mysql 允许多个浏览器持久登录时的数据库问题

Mysql 允许多个浏览器持久登录时的数据库问题,mysql,cookies,remember-me,Mysql,Cookies,Remember Me,我正在尝试使用cookies实现一个“记住我”系统,该系统将跨浏览器记住用户,这意味着如果用户使用浏览器a登录网站并选中“记住我”,然后使用“记住我”登录浏览器B,则无论他使用哪种浏览器,他都将继续自动登录。(在浏览器B中选中“记住我”不会破坏他在浏览器A中的持久登录) 为此,我设置了数据库,以便将多个密钥存储在用户id旁边。当用户登录我的网站时,会检查cookie的值。如果在数据库中找到该值,则会为用户分配一个新的cookie,并更新数据库中的cookie键条目以匹配。其他键被单独保留,以便其

我正在尝试使用cookies实现一个“记住我”系统,该系统将跨浏览器记住用户,这意味着如果用户使用浏览器a登录网站并选中“记住我”,然后使用“记住我”登录浏览器B,则无论他使用哪种浏览器,他都将继续自动登录。(在浏览器B中选中“记住我”不会破坏他在浏览器A中的持久登录)

为此,我设置了数据库,以便将多个密钥存储在用户id旁边。当用户登录我的网站时,会检查cookie的值。如果在数据库中找到该值,则会为用户分配一个新的cookie,并更新数据库中的cookie键条目以匹配。其他键被单独保留,以便其他浏览器的登录持久性不会受到影响。当用户手动注销时,将检查cookie,删除数据库中相应的条目,然后删除cookie

当用户手动删除其cookie时,就会出现问题。如果用户这样做,我就无法删除数据库中相应的条目。它将成为我数据库中的一个永久条目。当我不尝试支持跨浏览器“记住我”时,这不是一个问题,但由于允许存储多个cookie密钥,这已经成为一个问题

有什么办法可以解决/避免这个问题吗

关于持久性登录有很多信息,但是跨浏览器的持久性登录似乎从未被涵盖,所以任何帮助都会很好。(也可以随意评论我的方法和任何安全问题。当我只允许每个用户有一个“记住我”时,它看起来更安全,但跨浏览器持久登录似乎是用户想要的功能)


我正在使用MySQL和PHP。

我建议使用“记住我(足够长)”解决方案。设置会话的有效期,但要使其变长。根据您希望用户登录的频率,这可能是8小时到一周到一年以上。每次他们使用有效的cookie访问时,您都会在幕后更新到期日,并且它看起来是持久的。如果他们删除cookie,那么最终他们的会话将被删除


(如果你没有实际使用会话,听起来你不是,你需要在这方面添加一些维护代码。最好是了解会话,而不是重新发明轮子。)

我同意@llion关于设置cookie过期的建议,在这种情况下,您可以创建一个从数据库中清除过期cookie的过程。但是,您可以让用户看到这一点,就好像cookies在您看到它们时是无限持久的一样


为了其他对这个问题感兴趣的读者的利益,我真的希望你只是数据库中的cookie。

嗯,如果他在另一台机器上使用浏览器,同一个登录名,会发生什么?这肯定会发生。在我们家里,我总是这样做。楼下我有三个箱子,楼上我妈妈有两台机器

也许您可以使用microtime和navigatior.userAgent中的UA字符串来保证会话是唯一的

但是你不能得到计算机名。但是你可以通过JSAPI获得他们的IP地址。但是使用它可能会在浏览器中触发某种警告对话框。不。不起作用


java可以获得ip。

要清楚地回答您的问题:

你不可能知道在野外有盗贼记忆标记,唯一真正的解决办法是让你的记忆标记只持续几周,然后cron job或daemon杀死它们

这将修复您的数据库过度拥挤问题,这似乎是您请求的用例

请注意,您正面临一个现实问题,您无法猜测用户何时删除了cookie,浏览器或其他方法不会启动反过程,因此唯一的方法是定期杀死未使用的cookie,并在使用后刷新过期日期

您描述您的系统的方式是更安全的(如果做得好的话)php会话的长寿命,因此我建议您保持当前的方法,使用series+令牌保护它,并在几周内杀死未使用的令牌


希望这对您有所帮助。

谢谢,日程表链接帮了大忙。