我有一个按钮,按下该按钮后,用户可以查看目录。目前我不会从用户那里收集任何信息。我只收集他们下载的目录。我想更改此设置以收集他们的 IP 地址并插入到我的数据库中。
我所要做的就是在我的 PHP 文件中创建一个变量,如下所示:
$ip = $_SERVER["REMOTE_ADDR"];
然后将其添加到我的 PDO 语句中以插入数据库?
我读到很多人建议也检查 $_SERVER["HTTP_X_FORWARDED_FOR"]
。我如何检查两者并将其分配给一个变量?
我这样做正确吗?
AJAX
$('.downloadButton').on('click', function (event) {
$.ajax({
url: 'downloadCatalogSend.php',
type: 'POST',
data: {
catalog_name: catalog_name,
button_triggered: button_triggered
}
});
});
PHP
$ip = $_SERVER["REMOTE_ADDR"];
try {
$con = getConfig('pdo');
$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$catalog_download_insert = "INSERT INTO catalog_download_now
(catalog_name, button_triggered, date_sent, $ip)
VALUES(?, ?, NOW(), ?)
";
$catalog_download_stmt = $con->prepare($catalog_download_insert);
$catalog_download_stmt->execute(array($catalog_name, $button_triggered, $ip));
$hasError = false;
echo $hasError;
} catch (PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
最佳答案
使用空合并运算符:
$ip = $_SERVER["HTTP_X_FORWARDED_FOR"] ?? $_SERVER["REMOTE_ADDR"];
如果已设置,则首选 HTTP_X_FORWARDED_FOR(如果请求来自代理,则为客户端 IP),否则回退到 REMOTE_ADDR(请求来自的实际 IP。)
警告:HTTP_X_FORWARDED_FOR 很容易被客户端伪造。
另请注意,您有这个:
$catalog_download_insert = "INSERT INTO catalog_download_now
(catalog_name, button_triggered, date_sent, $ip)
VALUES(?, ?, NOW(), ?)
";
从 $ip
中删除美元符号 - 这应该是字段名称,而不是您要在其中存储的值。
关于javascript - 使用 Ajax 捕获 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54097324/