【问题标题】:How can I detect user's device?如何检测用户的设备?
【发布时间】: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


【解决方案1】:

他们上次与您的应用程序交互时的User Agent 字符串怎么样?

作为一项额外的纵深防御安全措施,您还可以验证用户代理是否与他们之前用于此设备的用户代理相匹配,以减少会话劫持。请注意,任何浏览器或操作系统升级都会使该设备上的“记住我”失效。

作为旁注,您最好键入唯一 ID 而不是电子邮件地址,因为这样如果您将来需要更新用户的电子邮件会更容易。

【讨论】:

  • 好的,谢谢 .. 点赞。关于您的附注,我不得不说用户没有输入他的ID,而是输入了他的电子邮件。所以我必须使用用户的电子邮件进行验证。或者在验证 (需要再查询一次)之前获取用户 ID。
  • 第二个,或者你可以让你的查询加入两个表,从 ID --> 电子邮件。
【解决方案2】:

使用 web authn api 或凭证 api

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-28
    • 1970-01-01
    • 2022-11-02
    • 1970-01-01
    • 2012-08-26
    • 1970-01-01
    • 2015-01-06
    相关资源
    最近更新 更多