为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel - 获取网站唯一访客数量

Laravel - 获取网站唯一访客数量

PHP
摇曳的蔷薇 2022-08-19 15:22:57
我想收集我网站上唯一数量的访问者并将其存储在数据库中。即使没有帐户的人访问该网站,访问者数量也会增加。我该如何做到这一点?我知道我必须获取用户的IP地址或类似的东西,但我不知道如何在页面加载时获取没有帐户的用户的IP地址目前我有这个数据库表Visitors - ip - date_visited路线Route::get('/', function () {    $ip = Request::ip();    return view('welcome', compact('ip'));});
查看完整描述

4 回答

?
ibeautiful

TA贡献1993条经验 获得超6个赞

尝试使用以获取ip;Request::ip()


$ip = Request::ip();

对于拉拉维尔 5.4 +:


$ip = $request->ip();

// or

$ip = request()->ip();

我认为你可以使用中间件和redis来计算这个计数,这将减轻数据库的压力。


查看完整回答
反对 回复 2022-08-19
?
HUWWW

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);

    }

}

然后添加到 :middlewareApp\Kernel.php

  • 如果您希望它是在每个请求上运行的全局中间件,请将其添加到。$middleware

  • 如果您希望它仅在每个 -route 上运行,请将其添加到。$middlewareGroupsweb

  • 如果要指定何时应用中间件,请将其添加到。$routeMiddlewareroutes/web.php

您还应该考虑在“ ”-语句中移动任何逻辑,这样可以最大程度地降低用户因“跟踪”代码引起的任何错误而停止的风险。middlewaretrycatch

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);


查看完整回答
反对 回复 2022-08-19
?
一只斗牛犬

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


查看完整回答
反对 回复 2022-08-19
?
蓝山帝景

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']


查看完整回答
反对 回复 2022-08-19
  • 4 回答
  • 0 关注
  • 219 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号