javascript - 使用 Ajax 捕获 IP 地址

标签 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();
}

最佳答案

使用空合并运算符:

$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/

相关文章:

javascript - XMLHttpRequest:显式启用浏览器缓存(二进制数据)

php - GuzzleHttp\Client 忽略 base_url 中的基本路径

php - 如何在我们的自定义模块 magento 中覆盖购物车 Controller 优惠券操作

javascript - PHP/JS 无限滚动一次滚动加载 MySQL 中的所有数据

javascript 不转换特殊字符

javascript - array[1][2] 是什么意思?

javascript - ExtJS 6 - 存储 $binding 未定义

javascript - 灵活的功能 |用一个函数修改任何变量

如果选中下拉菜单选项,则 PHP/HTML 更改文本

asp.net - 操作无法完成。无效的FORMATETC结构