【发布时间】:2016-06-29 13:07:33
【问题描述】:
我正在尝试创建一个让用户保持登录状态的系统(类似于记住我的检查)。好的,我有一张这样的桌子:
// cookies
+---------+-------------------------+------------------+------------+------------+
| id | email | cookie | date_time | device |
+---------+-------------------------+------------------+------------+------------+
| int(11) | varchar(50) | varchar(128) | int(11) | |
+---------+-------------------------+------------------+------------+------------+
| 1 | jack_2009@gmail.com | ojer0f934mf2... | 1467204523 | |
| 2 | peter.zm@yahoo.com | ko4398f43043... | 1467205521 | |
| 3 | matrix_john23@gmail.com | 34fjkg3j438t... | 1467205601 | |
| 4 | peter.zm@yahoo.com | 0243hfd348i4... | 1467206039 | |
+---------+-------------------------+------------------+------------+------------+
如您所见,此用户 peter.zm@yahoo.com 已通过两种不同的设备登录:
| 2 | peter.zm@yahoo.com | ko4398f43043... | 1467205521 | |
| 4 | peter.zm@yahoo.com | 0243hfd348i4... | 1467206039 | |
所以email 列不是唯一的,每个设备都有自己的行。
我的问题:如何填写device 列?
为什么需要确定设备?因为当用户删除其浏览器的 cookie 时,我的网站会将他识别为新用户并在上表中为他创建一个新行。所以过一段时间,表中就会出现一些多余的行。
例如:想象peter 只有两个设备(笔记本电脑、手机)。他在上面的表格中有两行。好的,他删除了浏览器的 cookie 并登录。会发生什么?我的网站在上面的表格中创建了一个新行。现在peter 在上面的表格中有 3 行 (而他只有两个设备)。所以这三行之一肯定是多余的。这就是为什么我需要检测设备以删除冗余行。
【问题讨论】:
-
这看起来像XY problem。
-
我删除了 MySQL 标签。您想将它存储在 MySQL 中很好,也许这种解释可能有助于可视化问题,但问题本身(如何获得一些唯一的设备标识)与 MySQL 无关。
-
我想反问的一个问题是:你甚至需要两行吗?您可以在 PHP 中使用set the session_id,这样您就可以回收相同的 cookie 值,获取相同的会话信息,并继续使用他之前在另一台设备上设置的设置。但这只是一个建议,我不知道这是否对你有用(这就是@FirstOne 的 XY 问题所在)。
-
该表中没有任何内容告诉我 Peter 登录了两个不同的设备。难道他不能从同一个设备但多个浏览器登录,甚至是隐身模式吗?也不清楚为什么设备的数量很重要或如何使用这些数据..
-
@chris85 你是对的......那么管理这个的标准方法是什么?实际上我的整个问题是this
标签: php algorithm security cookies