繁体   English   中英

Laravel,捕获访客IP的最佳方法是什么?

[英]Laravel, What is best approach to capture Visitors Ip?

我正在寻找最好的支持/安全方法来捕获访问者的IP地址。

目前,我可以通过以下方法保存访问者IP

拨打电话的路线。

Route::get('/','VisitorController@multidisplay');

在多显示功能中,我正在调用另一个控制器来捕获和存储“访客IP”,例如->

 public function multidisplay()
    {   
        //calling log visitor controller
        app()->call('App\Http\Controllers\LogVisitIpController@store');


        return view('welcome')
        ->with('sliderimg', Sliderimage::all())
        ->with('postimg', PostImage::orderBy('created_at', 'desc')->take(3)->get())
        ;

    }

最后是在LogVisitIpController中存储访问者的Ip的实际功能

public function store(Request $request)
    {
        $bla=$this->getIp();
        $myvisitor = new LogVisitIp();
        $myvisitor->visitorIp=$bla;
        $myvisitor->save();
    }

现在我有两个问题。

  1. 在其他控制器中使用像这样的控制器可以吗?

  2. 我是否应该使用另一种方法通过一个控制器捕获访问者IP?

注意:VisitorController用于将访问者的请求保存到数据库中并发送邮件,我可以收集IP并将其从访问者的请求中传递出去,但我的目的是在访问者打开我的网站或发出ping请求后立即捕获Ip。

即使您的代码实际可行,我也不建议您使用该技术。 这是您应该做的。

定义仅用于保存ips的类。 您将把真正记录IP的代码移到此处。

Class VisitIpLoggerService
{
    public function storeIp(Request $request)
    {
        $myvisitor = new LogVisitIp();
        $myvisitor->visitorIp=$request->ip();
        $myvisitor->save();
    }
}

然后,您将该服务注入到控制器的函数中,并像这样调用该函数。 这样,您的代码将更易于维护。

public function multidisplay(Request $request, VisitIpLoggerService $ipLogger)
{   
    //just call the service
    $ipLogger->storeIp($request);

将此添加到您的控制器中...

'ip_address_variable' => \Request::ip();

对你来说

public function store(Request $request)
    {
        $bla=$this->getIp();
        $myvisitor = new LogVisitIp();
        $myvisitor->visitorIp=$request->ip();
        $myvisitor->save();
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM