4 回答

TA貢獻(xiàn)1993條經(jīng)驗(yàn) 獲得超6個(gè)贊
嘗試使用以獲取ip;Request::ip()
$ip = Request::ip();
對(duì)于拉拉維爾 5.4 +:
$ip = $request->ip();
// or
$ip = request()->ip();
我認(rèn)為你可以使用中間件和redis來(lái)計(jì)算這個(gè)計(jì)數(shù),這將減輕數(shù)據(jù)庫(kù)的壓力。

TA貢獻(xiàn)1874條經(jīng)驗(yàn) 獲得超12個(gè)贊
在這種情況下,一個(gè)好的解決方案是創(chuàng)建一個(gè)跟蹤所有用戶的。我們可以將任何類型的業(yè)務(wù)邏輯放在 .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
如果您希望它是在每個(gè)請(qǐng)求上運(yùn)行的全局中間件,請(qǐng)將其添加到。
$middleware
如果您希望它僅在每個(gè) -route 上運(yùn)行,請(qǐng)將其添加到。
$middlewareGroups
web
如果要指定何時(shí)應(yīng)用中間件,請(qǐng)將其添加到。
$routeMiddleware
routes/web.php
您還應(yīng)該考慮在“ ”-語(yǔ)句中移動(dòng)任何邏輯,這樣可以最大程度地降低用戶因“跟蹤”代碼引起的任何錯(cuò)誤而停止的風(fēng)險(xiǎn)。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貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超2個(gè)贊
最好使用組合并有更準(zhǔn)確的結(jié)果,許多用戶可能具有相同的IP,但通常具有不同的用戶代理:user_agentip
request()->userAgent();
request()->ip();
或者,如果您使用的是中間件(不是),Laravel 會(huì)為每個(gè)客戶端啟動(dòng)一個(gè)會(huì)話。您可以更改會(huì)話驅(qū)動(dòng)程序,并使用 代替默認(rèn)的 .webapidatabasefile
通過(guò)這種方式,Laravel將在表格中為每個(gè)客戶存儲(chǔ)一條記錄,其中包含您需要的所有信息,甚至更多: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');
});
如您所見(jiàn),有 、 和 。將用于來(lái)賓用戶,并且對(duì)經(jīng)過(guò)身份驗(yàn)證的用戶具有價(jià)值。ip_addressuser_agentlast_activityuser_idnull
請(qǐng)參閱 Laravel 文檔以將會(huì)話驅(qū)動(dòng)程序配置為使用 。database

TA貢獻(xiàn)1843條經(jīng)驗(yàn) 獲得超7個(gè)贊
您將如何獲得IP地址。
為 IP 地址及其訪問(wèn)時(shí)間戳創(chuàng)建一個(gè)新表。
檢查IP是否不存在或(1天),將IP的時(shí)間戳編輯為time()(表示現(xiàn)在)并增加您的視圖,其他人什么都不做!time()-saved_timestamp > 60*60*24
此外,您可以通過(guò)以下方式獲得IP$_SERVER['REMOTE_ADDR']
這里提到了獲取IP的更多方法。https://stackoverflow.com/a/54325153/2667307
已查看返回127.0.0.1
請(qǐng)嘗試:-
request()->server('SERVER_ADDR');
或者您可以使用
$_SERVER['SERVER_ADDR'];
或
$_SERVER['REMOTE_ADDR']
- 4 回答
- 0 關(guān)注
- 199 瀏覽
添加回答
舉報(bào)