Program Tip

Symfony2 컨트롤러에서 사용자 IP 주소를 어떻게 얻습니까?

programtip 2020. 11. 9. 20:30
반응형

Symfony2 컨트롤러에서 사용자 IP 주소를 어떻게 얻습니까?


댓글을 작성한 사용자의 IP 주소를 양식 제출 후 데이터베이스에 저장해야합니다.

IP를 얻기위한 symfony2 기능이 있습니까? 아니면 IP를 얻는 다른 방법이 있습니까?


요청 서비스를 사용하여 클라이언트 IP를 얻을 수 있습니다.

$this->container->get('request')->getClientIp();

2.3 이전의 Symfony에서는 $this->container->get('request')->getClientIp()마스터 요청 컨트롤러 내에서만 작동합니다. 하위 요청 컨트롤러에서 이것은 항상 127.0.0.1. 프로젝트가 Symfony 2.2에서 하위 요청을 사용하는 경우 방탄 솔루션은 kernel.request리스너 를 생성 하고 마스터 요청에서 IP를 저장하는 것입니다.

심포니에서 2.3 이 때문에 실제 IP가 프록시 목록에 밀려 내부 하위 요청을 고정 참조 된 https://github.com/symfony/symfony/commit/2f3b33a630727cbc9cf21262817240a72a8dae0c을 추가 할 필요가 그래서 127.0.0.1trusted_proxies클라이언트를 얻을 수 구성 매개 변수 Symfony 2.3+의 하위 요청에있는 Request의 ip이지만 보안상의 이유로 공유 호스팅에서는이 작업을 수행해서는 안됩니다.

또한 내장 HTTP 캐시 ( in )가 Symfony 2.3.20 이전에 사용 된 경우 명시 적으로에 127.0.0.1추가해야 했습니다. 이 캐시는 실제 리버스 프록시처럼 보이도록 시도하고 마스터 요청의 일부 헤더를 수정합니다. https://github.com/symfony/symfony/commit/902efb8a84e8f0acf6a63e09afa08e3dcdd80fb9 에서 수정되었습니다.trusted_proxiesAppCacheweb/app.php

Symfony 2.43.x 이후 현재 요청에 액세스하는 데 선호되는 방법은 request_stack서비스 를 사용하는 것입니다.

$this->container->get('request_stack')->getCurrentRequest()->getClientIp();

또는 컨트롤러에 요청을 삽입하려면 http://symfony.com/doc/current/book/controller.html#the-request-as-a-controller-argument를 참조 하십시오.

public function indexAction(Request $request)
{
    $ip = $request->getClientIp();
}

그러나 하위 요청에서 사용될 때 127.0.0.1을 제외하는 것에 대한 우려는 여전히 적용되지만 이제는 다음을 사용하여 명시 적으로 마스터 요청을 참조 할 수 있습니다.

$this->container->get('request_stack')->getMasterRequest()->getClientIp();

참고로, Symfony 2.0 기준 Request::getClientIp$proxy 매개 변수는 있다 되지 않습니다 . 그것은됩니다 제거 심포니 2.3.

사용할 수 있습니다

$container->get('request')->server->get("REMOTE_ADDR");

또는 @meze 대답으로

$container->get('request')->getClientIp();

Symfony 2.6 이상의 경우 다음 코드를 사용하십시오 (컨트롤러 내에서 :

      $this->container->get('request_stack')->getCurrentRequest()->getClientIp();

현재 클라이언트 IP를 서비스 또는 메서드 호출에 삽입하는 또 다른 방법이 있습니다.

acme.currentIP:
    class: some\service\className
    arguments:
        - "@=service('request_stack').getCurrentRequest().getClientIp()"

참고 URL : https://stackoverflow.com/questions/9029757/how-do-i-get-the-user-ip-address-in-symfony2-controller

반응형