Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 限制用户从同一IP访问多个页面_Php_Mysql_Ip - Fatal编程技术网

Php 限制用户从同一IP访问多个页面

Php 限制用户从同一IP访问多个页面,php,mysql,ip,Php,Mysql,Ip,我正在编写一个脚本,它将限制特定用户从给定IP地址的多个访问。换句话说,给定用户只能从同一IP地址访问/查看页面一次 但是如何比较传入的IP来检测这种访问 我想跟踪IP最多60天。你需要一个IP列表,在某个地方查找,这样你可以使用一个表或将其写入一个文件,然后相应地读取。你需要一个IP列表,在某个地方查找,所以你可以使用一个表或将其写入一个文件,然后相应地读取第一件事,不同的计算机/用户可以而且确实共享一个IP地址。你可能会阻止很多人访问你的网站,因为他们工作场所的人也访问了你的网站。话虽如此,

我正在编写一个脚本,它将限制特定用户从给定IP地址的多个访问。换句话说,给定用户只能从同一IP地址访问/查看页面一次

但是如何比较传入的IP来检测这种访问


我想跟踪IP最多60天。

你需要一个IP列表,在某个地方查找,这样你可以使用一个表或将其写入一个文件,然后相应地读取。你需要一个IP列表,在某个地方查找,所以你可以使用一个表或将其写入一个文件,然后相应地读取第一件事,不同的计算机/用户可以而且确实共享一个IP地址。你可能会阻止很多人访问你的网站,因为他们工作场所的人也访问了你的网站。话虽如此,这是我的答案

您标记了MySQL,因此创建一个名为“ips”的表或类似的表

  • 身份证
  • 知识产权
  • 最后访问
每当有人访问您的站点时,请检查是否在此表中找到了他们的IP地址,以及上次访问日期是否在今天的60天内。如果是,则拒绝或重定向请求。如果他们的IP不在表中,或者日期大于今天起60天,请插入/更新表以包含他们的IP和当前时间,然后允许他们查看请求的页面


这不需要在数据库中完成,您可以在平面文件系统中执行类似的逻辑。但是,您需要打开、读取和写入大量文件,这可能有点令人沮丧,因为您可能会在当前尝试读取文件时尝试写入文件。

首先,不同的计算机/用户可以并且确实共享一个IP地址。你可能会阻止很多人访问你的网站,因为他们工作场所的人也访问了你的网站。话虽如此,这是我的答案

您标记了MySQL,因此创建一个名为“ips”的表或类似的表

  • 身份证
  • 知识产权
  • 最后访问
每当有人访问您的站点时,请检查是否在此表中找到了他们的IP地址,以及上次访问日期是否在今天的60天内。如果是,则拒绝或重定向请求。如果他们的IP不在表中,或者日期大于今天起60天,请插入/更新表以包含他们的IP和当前时间,然后允许他们查看请求的页面


这不需要在数据库中完成,您可以在平面文件系统中执行类似的逻辑。但是,您需要打开、读取和写入大量文件,这可能有点令人沮丧,因为您可能会在当前尝试读取文件时尝试写入文件。

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保存在数据库中,在用户到来时进行查找,并根据匹配情况将其重定向到合适的页面。这可以在没有数据库的情况下完成吗?答案,但不值得投反对票。我也对反对票感到震惊。我做错了什么?简略的回答,但几乎不值得投反对票。我也对反对票感到震惊。我做错了什么?