我正在寻找最好的支持/安全方法来捕获访问者的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())
;
}
最后,将访问者的Ip存储在LogVisitIpController中的实际功能
public function store(Request $request)
{
$bla=$this->getIp();
$myvisitor = new LogVisitIp();
$myvisitor->visitorIp=$bla;
$myvisitor->save();
}
现在我有两个问题。
可以在另一个控制器中使用类似的控制器吗?
我应该使用另一种方法来捕获访问者ip 控制器?
注意:VisitorController用于将访问者的请求保存到DB中并发送邮件,我可以收集IP并从访问者的请求中传递它,但我的目的是在访问者打开我的网站或进行ping操作后立即捕获Ip请求。
答案 0 :(得分:2)
即使您的代码实际可行,我也不建议您使用该技术。 这是您应该做的。
定义一个仅用于保存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);
答案 1 :(得分:0)
将此添加到您的控制器中...
'ip_address_variable' => \Request::ip();
对于您的情况,
public function store(Request $request)
{
$bla=$this->getIp();
$myvisitor = new LogVisitIp();
$myvisitor->visitorIp=$request->ip();
$myvisitor->save();
}