Vis*_*mar 68 ip-address symfony
我需要在表单提交后在数据库中存储注释用户的IP地址.
是否有任何symfony2函数来获取IP?或任何其他方式获得IP?
mez*_*eze 143
您可以使用请求服务获取客户端IP:
$this->container->get('request')->getClientIp();
Run Code Online (Sandbox Code Playgroud)
Kon*_*lin 47
在Symfony 2.3之前 $this->container->get('request')->getClientIp()只在主请求控制器内部工作.在子请求控制器中,它总是返回127.0.0.1.如果您的项目使用Symfony 2.2的子请求,则防弹解决方案是创建kernel.request侦听器并从其中的主请求中保存IP.
在Symfony的2.3这是固定所以对于真正的IP被推到代理服务器列表内的子请求,见https://github.com/symfony/symfony/commit/2f3b33a630727cbc9cf21262817240a72a8dae0c
所以你需要添加127.0.0.1到trusted_proxies配置参数,以获得客户端来自Symfony 2.3+中的子请求中的请求的ip,但出于安全原因,您不应该在共享主机上执行此操作.
此外,如果在Symfony 2.3.20之前使用内置HTTP缓存(in ),则127.0.0.1必须trusted_proxies明确添加.此缓存尝试看起来像真正的反向代理并修改主请求的某些标头.在https://github.com/symfony/symfony/commit/902efb8a84e8f0acf6a63e09afa08e3dcdd80fb9中修复AppCacheweb/app.php
从Symfony 2.4和3.x开始,访问当前请求的首选方法是使用request_stack服务
$this->container->get('request_stack')->getCurrentRequest()->getClientIp();
Run Code Online (Sandbox Code Playgroud)
或将请求注入控制器,请参阅http://symfony.com/doc/current/book/controller.html#the-request-as-a-controller-argument
public function indexAction(Request $request)
{
$ip = $request->getClientIp();
}
Run Code Online (Sandbox Code Playgroud)
但是在子请求中使用时排除127.0.0.1的问题仍然适用,但现在您可能尝试使用显式引用主请求
$this->container->get('request_stack')->getMasterRequest()->getClientIp();
Run Code Online (Sandbox Code Playgroud)
yvo*_*yer 17
仅供参考,截至Symfony 2.0 该Request::getClientIp$proxy 参数已弃用.它将在Symfony 2.3中删除.
你可以使用
$container->get('request')->server->get("REMOTE_ADDR");
Run Code Online (Sandbox Code Playgroud)
或者@meze回答
$container->get('request')->getClientIp();
Run Code Online (Sandbox Code Playgroud)
对于Symfony 2.6+,请使用以下代码(在您的控制器中:
$this->container->get('request_stack')->getCurrentRequest()->getClientIp();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
71516 次 |
| 最近记录: |