php - 如何记录每个用户尝试登录的每个 IP 地址?

标签 php mysql

正如标题所说,我正在尝试找到一种方法来记录每个尝试登录的 IP 地址,这适用于每个用户。使用 PHP 和 MYSQL

我举个例子详细解释一下:

IP:1.1.1.1 尝试登录用户“Charlie123”,与结果无关我想像这样存储它的 IP:

用户:Charlie123 - IP 1.1.1.1

然后还有另一个 IP:2.2.2.2 尝试登录同一用户,再次独立于结果,我想像这样存储它的 IP(记住我们已经存储了之前的第一个IP) 用户:Charlie123 - IP 1.1.1.1, 2.2.2.2

以此类推对每个 IP 的每次尝试。 这样我就可以轻松搜索 X 用户并找到他/她使用的每个 IP。

我所知道的:

我知道如何根据 POST 检索用户 IP,我知道如何将其存储在数据库中。问题是我不知道如何在不破坏数据库的情况下做到这一点,因为列太多/字符太多。

我尝试过的(在我看来):

使用包含帐户(用户名和密码)的表添加一个列,该列将存储用“,”分隔的 IPS。这失败了,因为我将在该列上达到大量字符,我认为这不可能也不正确。

创建一个新表,其中包含 1 列用户和 1 列每个 IP。这失败了,因为它会达到大量的列,而且我不认为这是做这样的事情的方法,想象一下醒来并在一个表中有 1000000 列,其中一半是空的。

如果我在这里写错了,请纠正我。

为什么是 IP 地址?

老实说,我开始使用 IP 是为了确保一切都按预期工作,并且我的想法没有错。这可以扩展到记录尝试登录的计算机、用户使用的浏览器等。 现在我将坚持只使用 1 个值,即 IP。

我需要什么样的答案:

实现此目的的任何方法,任何示例、伪代码、代码,任何东西都有效。

提前致谢。

最佳答案

创建一个新表是正确的答案,但是“每个 IP 有 1 列”。是错误的,不要将不同的 ip 保存到列中,像这样将它们保存到不同的行中:

mysql table structure

并通过以下方式搜索:

select * from login_history order by created_at desc limit 10;

query result 1

或者可能有人更改了那里的用户名,您可以使用此 sql 来检查他们的新用户名:

select u.username, lh.ipv4, lh.created_at from `user` u left join `login_history` lh ON u.id=lh.uid order by created_at desc limit 10;

query result 2

关于php - 如何记录每个用户尝试登录的每个 IP 地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54379039/

相关文章:

mysql - 受损的 DigitalOcean Droplet 路由奇怪的流量

php - 通过 PHP 和控制台从 Git pull

php - 部分删除/销毁 $_SESSION 数据? PHP

php - Imap_search 很慢

mysql - 通过 MySQL 访问 Drizzle 数据库

mysql - SQL函数应该是大写还是小写?

mysql - 这个简单的创建表查询出现难以理解的错误

php - 先到先得 php

php - 从字符串(标签)中检索数据

php - 在每行上运行一些计算后更新表中每条记录的优化方法