[英]Limit user access to user identified by IP address only 5 times a day
对于每天仅5次由IP地址标识的用户,我需要限制对PHP网页的访问。
我已经在会话中完成了此功能,但是在要求中,我必须使用IP地址而不是会话。
您知道最简单的方法吗?
非常感谢。
首先,创建一个具有以下列的表:
|-----------------------------------|
| IP varchar(15) | Views tinyint(1) |
|-----------------------------------|
然后在每个视图上插入IP(如果尚未在数据库中)或将视图增加1。如果views = 5,则杀死该页面,并且不允许用户访问。
然后,您可以在每天晚上00:00运行cron,以删除表中的所有数据(请参阅: truncate
)。
每次访问时,将IP地址( UNIQUE
字段)与当前日期/时间和计数器一起保存到数据库中。 如果IP地址已经存在于数据库中,则增加计数器并更新每次访问的日期/时间。
现在,您可以在计数器大于 5
并且日期/时间不是一天前拒绝访问。
但是,请考虑一下布拉德对您说的话。 IP地址不是识别用户的可靠方法。
建立在囚犯的答案上:
我会在此表中添加一个日期字段并进行插入...在重复键更新中
奖励字段: 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(有符号/无符号),因此,如果您的需求发生了变化,并且您需要的更多,则需要调整字段
您应该查看apc缓存或Zend缓存来存储从$_SERVER['REMOTE_HOST']
获取的IP
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.