4 回答

TA贡献1993条经验 获得超6个赞
尝试使用以获取ip;Request::ip()
$ip = Request::ip();
对于拉拉维尔 5.4 +:
$ip = $request->ip();
// or
$ip = request()->ip();
我认为你可以使用中间件和redis来计算这个计数,这将减轻数据库的压力。

TA贡献1874条经验 获得超12个赞
在这种情况下,一个好的解决方案是创建一个跟踪所有用户的。我们可以将任何类型的业务逻辑放在 .middlewaremiddleware
<?php
namespace App\Http\Middleware;
use Closure;
class TrackUser
{
public function handle($request, Closure $next)
{
/* You can store your user data with model, db or whatever...
Here I use a repository that contains all my model queries. */
$repository = resolve('App\Repositories\TrackUserRepository');
$repository->addUser([
'ip' => request()->ip(),
'date' => now(),
]);
return $next($request);
}
}
然后添加到 :middleware
App\Kernel.php
如果您希望它是在每个请求上运行的全局中间件,请将其添加到。
$middleware
如果您希望它仅在每个 -route 上运行,请将其添加到。
$middlewareGroups
web
如果要指定何时应用中间件,请将其添加到。
$routeMiddleware
routes/web.php
您还应该考虑在“ ”-语句中移动任何逻辑,这样可以最大程度地降低用户因“跟踪”代码引起的任何错误而停止的风险。middleware
try
catch
try {
$repository = resolve('App\Repositories\TrackUserRepository');
$repository->addUser([
'ip' => request()->ip(),
'date' => now(),
]);
} catch (\Exception $e) {
// Do nothing or maybe log error
}
return $next($request);

TA贡献1784条经验 获得超2个赞
最好使用组合并有更准确的结果,许多用户可能具有相同的IP,但通常具有不同的用户代理:user_agentip
request()->userAgent();
request()->ip();
或者,如果您使用的是中间件(不是),Laravel 会为每个客户端启动一个会话。您可以更改会话驱动程序,并使用 代替默认的 .webapidatabasefile
通过这种方式,Laravel将在表格中为每个客户存储一条记录,其中包含您需要的所有信息,甚至更多:sessions
Schema::create('sessions', function ($table) {
$table->string('id')->unique();
$table->unsignedInteger('user_id')->nullable();
$table->string('ip_address', 45)->nullable();
$table->text('user_agent')->nullable();
$table->text('payload');
$table->integer('last_activity');
});
如您所见,有 、 和 。将用于来宾用户,并且对经过身份验证的用户具有价值。ip_addressuser_agentlast_activityuser_idnull
请参阅 Laravel 文档以将会话驱动程序配置为使用 。database

TA贡献1843条经验 获得超7个赞
您将如何获得IP地址。
为 IP 地址及其访问时间戳创建一个新表。
检查IP是否不存在或(1天),将IP的时间戳编辑为time()(表示现在)并增加您的视图,其他人什么都不做!time()-saved_timestamp > 60*60*24
此外,您可以通过以下方式获得IP$_SERVER['REMOTE_ADDR']
这里提到了获取IP的更多方法。https://stackoverflow.com/a/54325153/2667307
已查看返回127.0.0.1
请尝试:-
request()->server('SERVER_ADDR');
或者您可以使用
$_SERVER['SERVER_ADDR'];
或
$_SERVER['REMOTE_ADDR']
- 4 回答
- 0 关注
- 219 浏览
添加回答
举报