這篇文章主要介紹了Laravel中如何判斷用戶是否在線,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
站在用戶的角度思考問題,與客戶深入溝通,找到猇亭網(wǎng)站設(shè)計與猇亭網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名與空間、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務(wù)覆蓋猇亭地區(qū)。在Laravel應(yīng)用程序用戶個人資料頁面上,用戶名旁邊添加一個綠點,表示他們是否在線。我首先想到的是,我們將需要啟動一個node.js服務(wù)器并跟蹤每個用戶的活動套接字連接。然后用當(dāng)前登錄的用戶套接字,我們可以實時更新在線狀態(tài)!的問題是,這是我們目前的要求,有點超過頂部,并沒有完全必要的,直到我們的功能,需要達(dá)到第二個準(zhǔn)確性,如實時聊天。
一位同事指出,對于目前的需求,MySpace用來處理“在線”功能的方式可能就足夠了。就我們所知,MySpace用來顯示用戶是否在線的方式是基于他們在網(wǎng)站上的最后一項活動。如果他們的最后一次活動在X分鐘內(nèi),我們會顯示“在線”徽章,如果沒有,我們不會。簡單!
讓我們?yōu)橛脩舻纳洗位顒釉谟脩舯碇刑砑右粋€字段,并且在請求每個頁面時更新它。然后當(dāng)我們需要檢查用戶是否在線,我們可以將該時間戳與當(dāng)前時間戳進(jìn)行比較,如果在X分鐘內(nèi),則他們在線!雖然這可以工作得很好,這取決于你正在構(gòu)建的應(yīng)用程序,它會向數(shù)據(jù)庫添加不必要的 寫入 ,這會在某種程度上降低你應(yīng)用程序的速度。一個好的折衷辦法是將這些信息存儲在應(yīng)用程序緩存中。 緩存的好處是可以簡化這種方法,因為可以設(shè)置緩存為過期。
現(xiàn)在我們決定使用緩存實現(xiàn)這個特性,下一個問題是這個代碼應(yīng)該在哪里運(yùn)行,以便它在每個請求上運(yùn)行?我有兩個想法可以實現(xiàn):
創(chuàng)建一個 BaseController,讓你所有的 Controller 都繼承它
創(chuàng)建一個中間件
經(jīng)過一些思考,并意識到我需要在所有已經(jīng)編寫的構(gòu)造函數(shù)中添加對父構(gòu)造函數(shù)的調(diào)用,我選擇在中間件中實現(xiàn)。
我們有個計劃,讓我們進(jìn)入代碼!
首先,我們需要創(chuàng)建一個中間件。在終端中輸入以下命令:
php artisan make:middleware LogLastUserActivity
接下來我們打開以下php文件
app/Http/Middleware/LogLastUserActivity.php.
在其中的 handle 方法中添加下面的代碼:
if(Auth::check()) { $expiresAt = Carbon::now()->addMinutes(5); Cache::put('user-is-online-' . Auth::user()->id, true, $expiresAt); }
接下來,我們打開 app/Http/Kernel.php 文件。如果您使用的是 Laravel 5.1 或 更早的版本, 您應(yīng)該把代碼直接放置到 $middleware
數(shù)組中。 如果您的版本是 5.2.* , 您應(yīng)該把代碼放置到 $middlewareGroups
的 web 中 。注意,一定要把代碼放到 StartSession 中間件的下方,否則 Auth 門面將不會正確在user中記錄log。我的更新配置設(shè)置如下:
protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class \App\Http\Middleware\VerifyCsrfToken::class, \App\Http\Middleware\LogLastUserActivity::class, ], 'api' => [ 'throttle:60,1', ], ];
最后一步是添加一個方法到我們的 user 對象中去檢測這個值. 在 app/User.php 我們添加下面的方法:
public function isOnline() { return Cache::has('user-is-online-' . $this->id); }
現(xiàn)在在任何頁面中你就能添加下面的方法:
@if($user->isOnline()) user is online!! @endif
重要提示 -- 確保在你的文件頂部使用 use 引入所有的 facades!
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Laravel中如何判斷用戶是否在線”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,,關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!