我需要限制每天只有5次通过IP地址识别的用户访问PHP网页。
我已经使用会话完成了这个功能,但是在要求中我必须使用IP地址而不是会话。
有关最简单方法的想法吗?
非常感谢。
答案 0 :(得分:8)
首先,创建一个包含以下列的表:
|-----------------------------------|
| IP varchar(15) | Views tinyint(1) |
|-----------------------------------|
然后在每个视图上插入IP(如果它还没有在数据库中)或者按1递增视图。如果views = 5则杀死页面并且不允许用户访问。
然后您可以在00:00每晚运行一次cron,删除表格中的所有数据(参见:truncate
)。
答案 1 :(得分:3)
在每次访问时,将IP地址(UNIQUE
字段)与当前日期/时间和计数器一起保存到数据库中。如果IP地址已经在数据库中存在,则增加计数器并更新每次访问的日期/时间。
现在,当计数器大于 5
且日期/时间不一天时,您可以拒绝访问
然而,请考虑布拉德对你说的话。 IP地址不是识别用户的可靠方法。
答案 2 :(得分:2)
立足于囚徒的回答:
我要在此表中添加一个日期字段并执行插入... ON DUPLICATE KEY UPDATE
奖励字段:ip_log_page
因此您可以在多个页面上使用此功能。
您还可以根据日期运行删除查询,以便从昨天和之前删除内容 - 无论是cron还是网页上脚本的一部分。
CREATE TABLE ip_log
(
ip_log_ip VARCHAR(40),
ip_log_date DATE,
ip_log_visits TINYINT(1),
ip_log_page varchar(255),
PRIMARY KEY(ip_log_page,ip_log_ip,ip_log_date),
);
请记住,tinyint(1)的上限为127/255(有符号/无符号),因此如果您的需求发生变化且需要更多,则需要调整字段
答案 3 :(得分:0)
您应该查看apc cache或Zend cache以存储您从$_SERVER['REMOTE_HOST']
获得的IP