繁体   English   中英

将用户限制为每天仅5次访问由IP地址标识的用户

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM