【问题标题】:How to get IP address of client in PHP for the requests made via AMP email如何在 PHP 中为通过 AMP 电子邮件发出的请求获取客户端的 IP 地址
【发布时间】:2021-06-20 02:28:46
【问题描述】:

我已经实现了 AMP 电子邮件,所以当客户端通过 amp-form 从电子邮件正文内部提交任何数据时,请求会发送到谷歌,谷歌会通过 HTTP 请求将数据提交到我的服务器,但当 AMP 请求发送到我的服务器来自 Google 服务器而不是客户端的浏览器,我无法通过普通的 PHP $_SERVER 变量获取客户端的 IP。

AMP EMAILS 是否有任何解决方法,我可以通过它在我的 PHP Apache 后端中获取客户端的 IP?

以下是我目前用来获取 IP 的代码,但无法在任何 $_SERVER 键中获取客户端 IP:

function get_ip_address()
{
    $str="";
    foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key){
        if (array_key_exists($key, $_SERVER) === true)
        {
            foreach (explode(',', $_SERVER[$key]) as $ip)
            {
                $ip = trim($ip); // just to be safe
        
                if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false)
                {
                    $str .= $key." => ".$ip."    ";;
                }
            }
        }
    }
    return $str;
}

编辑: 根据Su Zhanghis answer 的评论,由于隐私问题,我们无法获取用户的IP,因此我可以根据客户端的地理位置获取附近IP 的解决方案/解决方法也适用于我。

【问题讨论】:

  • 您必须首先将客户端 IP 放入表单的某个字段中,以便 Google 将数据传递到您的服务器时,您可以在其中找到它。
  • @CBroe , 即使我在我的amp-form 中创建一个字段,如何在提交表单时将这个字段填充为客户的IP?
  • 您需要服务器端代码,首先确定客户端 IP(基本上,您已经拥有上面的内容。)然后,如果您可以从服务器填充 amp-form 中的字段 -直接使用辅助代码(不知道,我不使用它们),这样做 - 否则,您可能不得不通过 JavaScript “绕道”;使确定的 IP 地址可用于您的脚本(使用 PHP 创建 JS 变量),并将其放入客户端的目标字段中。
  • 使用服务器端代码,这是不可能的,因为变量的值将在发送电子邮件时计算,因此我可以在那时获得我的服务器的 IP,并且包括在内不会受益。我无法添加 JS 添加代码,因为 AMP 不允许外部脚本。根据文档:AMP 电子邮件中只能包含受支持组件的 AMP 脚本
  • 但是用户首先你的服务器请求了amp页面,不是吗?届时将是确定他们的 IP 地址的时候了。

标签: php apache ip amp-html amp-email


【解决方案1】:

AMP 电子邮件提供商不会透露用户的 IP 地址,否则会导致隐私泄露。无法通过表单提交获取用户的IP地址。

【讨论】:

  • 用户在启用动态电子邮件的同时同意某些条件,这怎么可能是隐私泄露?能否提供google给出的支持性声明或官方文档?
  • 你指的是什么条件?不应该有条件说用户可以公开他们的 IP 地址以使用动态电子邮件。大多数电子邮件的实现通过代理电子邮件中的资源来保护这方面的用户。例如,Gmail 对图像执行此操作:“发件人无法使用图像加载来获取有关您的计算机或位置的信息。” httpss://support.google.com/mail/answer/145919?hl=en&co=GENIE.Platform%3DDesktop&oco=0,同样的事情也适用于电子邮件中的 amp-form 提交。
  • 我知道了,非常感谢。但是我保持这个问题是开放的,所以如果有人有任何解决方法来获得附近的 IP(地理位置明智),如果不准确的话,我会根据那个更新我的问题..
猜你喜欢
  • 2020-01-18
  • 2020-03-17
  • 2014-04-11
  • 2021-10-22
相关资源
最近更新 更多