Php 限制用户从同一IP访问多个页面
我正在编写一个脚本,它将限制特定用户从给定IP地址的多个访问。换句话说,给定用户只能从同一IP地址访问/查看页面一次 但是如何比较传入的IP来检测这种访问Php 限制用户从同一IP访问多个页面,php,mysql,ip,Php,Mysql,Ip,我正在编写一个脚本,它将限制特定用户从给定IP地址的多个访问。换句话说,给定用户只能从同一IP地址访问/查看页面一次 但是如何比较传入的IP来检测这种访问 我想跟踪IP最多60天。你需要一个IP列表,在某个地方查找,这样你可以使用一个表或将其写入一个文件,然后相应地读取。你需要一个IP列表,在某个地方查找,所以你可以使用一个表或将其写入一个文件,然后相应地读取第一件事,不同的计算机/用户可以而且确实共享一个IP地址。你可能会阻止很多人访问你的网站,因为他们工作场所的人也访问了你的网站。话虽如此,
我想跟踪IP最多60天。你需要一个IP列表,在某个地方查找,这样你可以使用一个表或将其写入一个文件,然后相应地读取。你需要一个IP列表,在某个地方查找,所以你可以使用一个表或将其写入一个文件,然后相应地读取第一件事,不同的计算机/用户可以而且确实共享一个IP地址。你可能会阻止很多人访问你的网站,因为他们工作场所的人也访问了你的网站。话虽如此,这是我的答案 您标记了MySQL,因此创建一个名为“ips”的表或类似的表
- 身份证
- 知识产权
- 最后访问
这不需要在数据库中完成,您可以在平面文件系统中执行类似的逻辑。但是,您需要打开、读取和写入大量文件,这可能有点令人沮丧,因为您可能会在当前尝试读取文件时尝试写入文件。首先,不同的计算机/用户可以并且确实共享一个IP地址。你可能会阻止很多人访问你的网站,因为他们工作场所的人也访问了你的网站。话虽如此,这是我的答案 您标记了MySQL,因此创建一个名为“ips”的表或类似的表
- 身份证
- 知识产权
- 最后访问
这不需要在数据库中完成,您可以在平面文件系统中执行类似的逻辑。但是,您需要打开、读取和写入大量文件,这可能有点令人沮丧,因为您可能会在当前尝试读取文件时尝试写入文件。User
$\u SERVER['REMOTE\u ADDR']
获取用户IP,但这不是最佳计划,因为使用同一代理的多个用户将在服务器上显示为一个IP=一个用户。然后将其存储在数据库中
更好的办法是在用户的浏览器上设置一个cookie,告诉您他们已经访问了。不过,他们可能会作弊。但是他们也可以通过使用不同的代理来欺骗IP。用户
$\u服务器['REMOTE\u ADDR']
来获取用户的IP,但这不是最好的计划,因为使用同一代理的多个用户在服务器上显示为一个IP=一个用户。然后将其存储在数据库中
更好的办法是在用户的浏览器上设置一个cookie,告诉您他们已经访问了。不过,他们可能会作弊。但它们也可以通过使用不同的代理来欺骗IP。您需要将IP存储在数据库或平面文件中的某个位置,以便进行比较
<?php
// Get the user's IP
$ip = getenv('REMOTE_ADDR');
// Create a database record, or update if they're been here before
$dblink = mysql_connect( 'localhost', 'username', 'password' );
mysql_select_db( 'database', $dblink );
$rs = mysql_query( "INSERT INTO visits (ip, date_created, last_visit, visits) VALUES( '$ip', NOW(), NOW(), 1 ) ON DUPLICATE KEY UPDATE `last_visit` = NOW(), visits=visits+1 ", $dblink );
// Compare database record for last visit and first visit
$rs = mysql_query( "SELECT visits, DATEDIFF( last_visit, date_created ) as sincelast FROM visits WHERE `ip` = '$ip' ");
$row = mysql_fetch_assoc( $rs );
// If this is their first visit, do one thing, otherwise, do another.
if ( $row['sincelast'] > 59 || $row['visits'] < 2 ) {
// They visited 60+ days ago, or this is their first visit
} else {
// This is not their first visit
}
假设您有一个MySQL表访问
,如下所示:
`ip` varchar(255) NOT NULL,
`date_created` datetime NOT NULL,
`last_visit` datetime NOT NULL,
`visits` int(255) NOT NULL,
PRIMARY KEY (`ip`)
使用PHP,我们可以获得用户的IP,在数据库中创建或更新一个表记录,然后进行一些比较
<?php
// Get the user's IP
$ip = getenv('REMOTE_ADDR');
// Create a database record, or update if they're been here before
$dblink = mysql_connect( 'localhost', 'username', 'password' );
mysql_select_db( 'database', $dblink );
$rs = mysql_query( "INSERT INTO visits (ip, date_created, last_visit, visits) VALUES( '$ip', NOW(), NOW(), 1 ) ON DUPLICATE KEY UPDATE `last_visit` = NOW(), visits=visits+1 ", $dblink );
// Compare database record for last visit and first visit
$rs = mysql_query( "SELECT visits, DATEDIFF( last_visit, date_created ) as sincelast FROM visits WHERE `ip` = '$ip' ");
$row = mysql_fetch_assoc( $rs );
// If this is their first visit, do one thing, otherwise, do another.
if ( $row['sincelast'] > 59 || $row['visits'] < 2 ) {
// They visited 60+ days ago, or this is their first visit
} else {
// This is not their first visit
}
您需要将IP存储在数据库或平面文件中的某个位置以进行比较
<?php
// Get the user's IP
$ip = getenv('REMOTE_ADDR');
// Create a database record, or update if they're been here before
$dblink = mysql_connect( 'localhost', 'username', 'password' );
mysql_select_db( 'database', $dblink );
$rs = mysql_query( "INSERT INTO visits (ip, date_created, last_visit, visits) VALUES( '$ip', NOW(), NOW(), 1 ) ON DUPLICATE KEY UPDATE `last_visit` = NOW(), visits=visits+1 ", $dblink );
// Compare database record for last visit and first visit
$rs = mysql_query( "SELECT visits, DATEDIFF( last_visit, date_created ) as sincelast FROM visits WHERE `ip` = '$ip' ");
$row = mysql_fetch_assoc( $rs );
// If this is their first visit, do one thing, otherwise, do another.
if ( $row['sincelast'] > 59 || $row['visits'] < 2 ) {
// They visited 60+ days ago, or this is their first visit
} else {
// This is not their first visit
}
假设您有一个MySQL表访问
,如下所示:
`ip` varchar(255) NOT NULL,
`date_created` datetime NOT NULL,
`last_visit` datetime NOT NULL,
`visits` int(255) NOT NULL,
PRIMARY KEY (`ip`)
使用PHP,我们可以获得用户的IP,在数据库中创建或更新一个表记录,然后进行一些比较
<?php
// Get the user's IP
$ip = getenv('REMOTE_ADDR');
// Create a database record, or update if they're been here before
$dblink = mysql_connect( 'localhost', 'username', 'password' );
mysql_select_db( 'database', $dblink );
$rs = mysql_query( "INSERT INTO visits (ip, date_created, last_visit, visits) VALUES( '$ip', NOW(), NOW(), 1 ) ON DUPLICATE KEY UPDATE `last_visit` = NOW(), visits=visits+1 ", $dblink );
// Compare database record for last visit and first visit
$rs = mysql_query( "SELECT visits, DATEDIFF( last_visit, date_created ) as sincelast FROM visits WHERE `ip` = '$ip' ");
$row = mysql_fetch_assoc( $rs );
// If this is their first visit, do one thing, otherwise, do another.
if ( $row['sincelast'] > 59 || $row['visits'] < 2 ) {
// They visited 60+ days ago, or this is their first visit
} else {
// This is not their first visit
}
这里有一个大问题,但IP并不是机器或人所独有的。那么,逻辑是什么呢?这里有一个大问题,但IP并不是机器或人所独有的。那么逻辑是什么呢?如果您坚持这样做&不使用数据库,那么您可能希望将访问数据存储在一个文件中,并访问它以检查ip的首次访问时间。当然,这在理论上与使用数据库几乎相同
执行上述建议的示例函数:
(请注意,这是非常粗糙和不可靠的使用,因为它是)
此功能的用法如下所示:
if( ! allowedIP() ) { /* ip is not allowed, notify the visitor and don't proceed */ }
如果您坚持这样做&不使用数据库,那么您可能希望将访问数据存储在一个文件中,并访问它以检查ip的首次访问时间。当然,这在理论上与使用数据库几乎相同
执行上述建议的示例函数:
(请注意,这是非常粗糙和不可靠的使用,因为它是)
此功能的用法如下所示:
if( ! allowedIP() ) { /* ip is not allowed, notify the visitor and don't proceed */ }
将IP保存在数据库中,在用户到来时进行查找,并根据匹配情况将其重定向到合适的页面。这可以在没有数据库的情况下完成吗?将IP保存在数据库中,在用户到来时进行查找,并根据匹配情况将其重定向到合适的页面。这可以在没有数据库的情况下完成吗?答案,但不值得投反对票。我也对反对票感到震惊。我做错了什么?简略的回答,但几乎不值得投反对票。我也对反对票感到震惊。我做错了什么?