【问题标题】:Yii2 get correct client IPYii2 获取正确的客户端 IP
【发布时间】:2018-11-15 18:18:03
【问题描述】:

我用这个函数来获取客户端ip:

 $client  = @$_SERVER['HTTP_CLIENT_IP'];

你可以在这里看到它。 http://city.ru.xsph.ru/web/

但此地址与使用其他主机的 IP 不匹配(正确的 IP)。例如: https://hidemyna.me/en/ip/

【问题讨论】:

  • 请标记对您有用的正确答案

标签: yii2 ip-address


【解决方案1】:

您可以使用YI2中提供的Yii2默认方法

Yii::$app->getRequest()->getUserIP()

或者,如果您希望将当前用户 ip 保存到数据库表中,我建议您在模型中使用 IPbehavior,例如

public function behaviors() {
        return [
            ...
            'ip' => [
                'class' => IpBehavior::className(),
                'attributes' => [
                    ActiveRecord::EVENT_BEFORE_INSERT => ['created_ip', 'updated_ip'],
                    ActiveRecord::EVENT_BEFORE_UPDATE => 'updated_ip',
                ],
            ]
            ...
        ];
    }

或者像这样。其中 value 可以是字符串或将返回字符串的匿名函数。

public function behaviors() {
    return [
        ...
        'ip' => [
            'class' => IpBehavior::className(),
            'createdIpAttribute' => 'created_ip',
            'updatedIpAttribute' => 'updated_ip',
            'value' => '127.0.0.1',
        ]
        ...
    ];
}

【讨论】:

    【解决方案2】:

    我认为要获取客户端 IP 地址,您必须使用以下代码:

     Yii::$app->request->userIP
    

    【讨论】:

      【解决方案3】:

      获取客户端 IP 的首选方式是使用 Yii::$app->request-remoteIp
      此方法使用负载均衡器或代理服务可以添加的 $_SERVER['REMOTE_ADDR'] 或 ip 标头(如 X-Forwarded-For)。

      但是,在某些情况下,您的公共 ip (https://hidemyna.me/en/ip/) 和您的应用程序显示的 ip (http://city.ru.xsph.ru/web/) 会有所不同 - 例如,如果您与您的应用程序在同一个网络上

      【讨论】:

      • 但是这个 IP 不正确 ($_SERVER['REMOTE_ADDR'])。如何获取显示在线资源的相同ip?
      猜你喜欢
      • 2015-01-29
      • 2022-01-20
      • 2020-12-08
      • 1970-01-01
      • 2013-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-07
      相关资源
      最近更新 更多