正如标题所述,我正在尝试找到一种方法来记录每个尝试登录的IP地址,这适用于每个用户。使用PHP和MYSQL
IP: 1.1.1.1 尝试登录用户“ Charlie123 ”,而与要存储其IP的结果无关,如下所示:
用户: Charlie123 -IP 1.1.1.1
然后还有一个具有IP的IP: 2.2.2.2 ,它尝试登录同一用户,再次与结果无关,我想这样存储它的IP(记住我们已经存储了之前的第一个IP) 用户: Charlie123 -IP 1.1.1.1 , 2.2.2.2
对于每个IP的每次尝试,依此类推。 这样,我可以轻松地搜索X用户并找到他/她使用的每个IP。
我知道如何根据POST检索用户的IP,并且知道如何将其存储在数据库中。问题在于,由于列/字符过多,我不知道如何做到不破坏数据库。
使用包含帐户(用户名和密码)的表,添加一列,该列将存储以“,”分隔的IPS。之所以失败,是因为我将在该列上看到大量的字符,而且我认为这不可能也不正确。
创建一个新表,该表将为User包含1列,每个IP包含1列。之所以失败,是因为它将达到巨大的列数,我不认为这是这样做的方法,想象一下醒来并在一个表中有1000000列,其中一半为空。
如果我在这里写的内容有误,请纠正我。
说实话,我从IP开始,以确保一切正常,并且我的想法没有错。这可以扩展为记录尝试登录的计算机,用户使用的浏览器等。 现在,我将只保留1个值,即IP。
任何实现此目的的方法,任何示例,伪代码,代码,任何有效的方法。
谢谢。
答案 0 :(得分:2)
跟踪来自不同IP地址的用户登录尝试 如果使用以下命令进行管理,将不会导致大量的空白记录 在插入记录之前进行适当的验证。在大多数地方 工程师需要跟踪每个用户的NoSQL数据库交互 像mongo这样的解决方案将比MySQL或其他RDBMS更受青睐。
However, If you use RDBMS approach:
1. Create a recent login_attempts table with username, ip_address, timestamp
2. Add check constraints on ip_address so that only valid IP addresses can be added.
3. Create a unique key of username and ip_address if duplicate records are found replace the current entry an insert the old record
into an archives tables with the old username, IP, timestamp.
4. Write a shell script to get periodically rid of stale data and keep the recent login attempts table clean.
答案 1 :(得分:2)
创建一个新表是正确的答案,但是“每个IP 1列”。是错误的,不要将不同的ip保存到列中,而是将它们保存到不同的行中:
并通过以下方式进行搜索:
select * from login_history order by created_at desc limit 10;
或者可能有人在其中更改用户名,您可以使用此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;
答案 2 :(得分:1)
我正在做类似的事情。我创建了三列,一列用于主键,另一列用于用户名,一列用于IP地址。
create table sample (sno int(9) auto_increment, username varchar(80), ipaddress varchar(15), primary key(sno))
每次尝试登录时,请在表中填写用户名和IP地址。
insert into sample (username, ipaddress) values ('abc', '1.1.1.1');
因此,如果我想根据用户名检查登录尝试,我只用用户名运行查询,如果我想用IP地址检查登录尝试,我就用IP地址运行查询。
select * from sample where username = 'abc'
select * from sample where ipaddress = '1.1.1.1'
要获得理想的结果,即用逗号分隔的IP地址,我只是使用php函数遍历行集并附加字符串(ip地址)
要附加ipaddress,类似这样的方法将对php有所帮助
$res // initial variable that holds username string
$query = //mysql query result
while($r = mysqli_fetch_assoc($query))
{
$res = $res.' comma or space etc '.$r['ipaddress'];
}
希望这会有所帮助。