如何检查与php页面的连接

如何检查与php页面的连接,php,Php,我可能把标题写错了。对不起 我只是想知道是否有一种方法可以检查用户与php页面的连接 例如,我有一个名为download.php的php页面,该页面允许用户下载sth并将此操作插入mysql,如下所示 $query = "INSERT INTO bla bla "; $result = mysql_query($query); header('Content-type: application/zip'); header('Content-Length: ' . filesize($file)

我可能把标题写错了。对不起

我只是想知道是否有一种方法可以检查用户与php页面的连接

例如,我有一个名为download.php的php页面,该页面允许用户下载sth并将此操作插入mysql,如下所示

$query = "INSERT INTO bla bla ";
$result = mysql_query($query);

header('Content-type: application/zip');
header('Content-Length: ' . filesize($file));
header("Content-Disposition: attachment; filename="file.zip");

readfile($file);
但有时,下载诸如orbit等管理软件。。。连接此页面数百次,然后炸毁数据库

有没有办法防止这种情况


谢谢

您可以在sql配置或apache中指定允许的连接数。设置数据库可以处理的最大连接数

编辑文件/etc/my.cnf
max_connections=1000

最好的办法是在下载开始之前删除MySQL连接,因为它在整个下载过程中保持打开状态。如有必要,在末端重新连接-问题应消失

也就是说,在最后一次使用MySQL之后,但在头之前,将

mysql_close();

如果我理解正确,您希望过滤掉来自下载管理器或机器人程序的请求,并且只在数据库中记录实际用户。我可以想出几种方法来实现这一点:

过滤用户代理:每个请求都应发送一个用户代理标头,该标头标识发出请求的浏览器或软件。您可以使用此方法筛选出bot并下载管理器(如果它们实际上使用的是单独的用户代理)

使用Cookie:假设下载管理器与浏览器共享Cookie状态,则在页面顶部显示类似的内容:

if (!isset($_COOKIE['download_check'])) {
    setcookie('download_check', '1', 0, '/');
} else {
    exit();
}
第一次之后,脚本将不会执行任何操作。要允许用户返回并重新下载,只需销毁任何其他页面上的cookie即可

使用JavaScript或meta标记重定向:假设下载程序或机器人不会执行JavaScript,请检查查询字符串中是否存在某些参数。如果不存在,则输出一个带有JavaScript或meta标记的短页面,重定向到带有参数的同一页面并退出,如下所示:

if (!isset($_GET['download_check'])) {
    echo "<html><script>window.location = 'this_page.php?download_check=1'</script></html>";
    exit();
}

我希望这些方法中的一个或多个可以帮助您过滤出对应用程序的错误请求。

好的,但当下载管理器重新连接该页面时,它会一遍又一遍地连接MYSQL吗?是的,但每次连接只会打开一毫秒,而不是整个下载过程。我和你有同样的问题,一旦我在下载开始前关闭了连接,它就消失了。