通过IP地址限制用户每天只访问5次

时间:2011-12-09 15:56:18

标签: php

我需要限制每天只有5次通过IP地址识别的用户访问PHP网页。

我已经使用会话完成了这个功能,但是在要求中我必须使用IP地址而不是会话。

有关最简单方法的想法吗?

非常感谢。

4 个答案:

答案 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 cacheZend cache以存储您从$_SERVER['REMOTE_HOST']获得的IP