使用Ajax捕获IP地址

时间:2019-01-08 18:04:38

标签: javascript php ajax pdo ip

我有一个按钮,按下该按钮时,用户可以查看目录。目前,我尚未从用户那里收集任何信息。我只收集他们下载的目录。我想更改此设置以收集其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();
}

1 个答案:

答案 0 :(得分:1)

使用空合并运算符:

$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中删除该美元符号-应该是字段名,而不是您要存储在其中的值。