>  기사  >  PHP 프레임워크  >  Laravel은 사용자가 온라인 상태인지 추적하는 기능을 구현합니다.

Laravel은 사용자가 온라인 상태인지 추적하는 기능을 구현합니다.

藏色散人
藏色散人앞으로
2020-01-30 20:57:282615검색

Laravel은 사용자가 온라인 상태인지 추적하는 기능을 구현합니다.

사용자가 Laravel에서 온라인인지 아닌지 추적하는 쉬운 방법

오늘 내 작업은 Laravel 애플리케이션 사용자 프로필 페이지의 사용자 이름 옆에 녹색 점을 추가하여 온라인 상태인지 나타내는 것입니다. 아니면.

첫 번째 생각은 node.js 서버를 시작하고 각 사용자의 활성 소켓 연결을 추적해야 한다는 것입니다. 그런 다음 현재 로그인된 사용자 소켓을 사용하여 온라인 상태를 실시간으로 업데이트할 수 있습니다!

유일한 문제는 이것이 현재 요구 사항에 비해 약간 과도하며 실시간 채팅과 같이 두 번째 수준의 정확성이 필요한 기능이 있기 전까지는 완전히 필요하지 않다는 것입니다.

한 동료는 MySpace가 "온라인" 기능을 처리하는 방식이 현재 요구 사항에 충분할 수 있다고 지적했습니다. 우리가 아는 한, MySpace가 사용자의 온라인 상태를 표시하는 데 사용되는 방식은 사이트에서의 마지막 활동을 기반으로 합니다.

마지막 활동이 X분 이내였다면 '온라인' 배지가 표시되고, 그렇지 않은 경우에는 표시되지 않습니다. 단순한!

사용자의 마지막 활동에 대한 필드를 사용자 테이블에 추가하고 페이지 요청이 있을 때마다 이를 업데이트해 보겠습니다. 그런 다음 사용자가 온라인 상태인지 확인해야 할 때 해당 타임스탬프를 현재 타임스탬프와 비교할 수 있으며 X분 이내이면 온라인 상태입니다.

이 방법은 제대로 작동할 수 있지만 구축 중인 애플리케이션에 따라 데이터베이스에 불필요한 쓰기가 추가되어 애플리케이션 속도가 어느 정도 느려질 수 있습니다.

좋은 절충안은 이 정보를 애플리케이션 캐시에 저장하는 것입니다. 캐싱의 이점은 캐시가 만료되도록 설정할 수 있기 때문에 이 접근 방식을 단순화할 수 있다는 것입니다.

이제 캐싱을 사용하여 이 기능을 구현하기로 결정했으므로 다음 질문은 이 코드가 모든 요청에 ​​대해 실행되도록 어디에서 실행해야 하는가입니다. 구현해야 할 두 가지 아이디어가 있습니다.

BaseController를 만들고 모든 컨트롤러가 여기에서 상속받도록 합니다.

미들웨어 만들기

몇 가지 생각을 하고 깨달은 후에 이미 작성한 모든 생성자를 추가해야 한다는 것을 선택했습니다. 미들웨어에서 상위 생성자에 대한 호출을 구현합니다.

계획이 있으니 코드를 작성해 볼까요!

먼저 미들웨어를 만들어야 합니다. 터미널에 다음 명령을 입력하세요.

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 또는 이전 버전을 사용하는 경우 코드를 $middleware 배열에 직접 배치해야 합니다. 버전이 5.2.*인 경우 web.xml의 $middlewareGroups에 코드를 배치해야 합니다.

코드는 StartSession 미들웨어 아래에 배치되어야 합니다. 그렇지 않으면 Auth 파사드가 사용자에게 올바르게 로그인되지 않습니다. 내 업데이트 구성 설정은 다음과 같습니다.

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

마지막 단계는 이 값을 감지하기 위해 사용자 개체에 메서드를 추가하는 것입니다.

app/User.php에 다음 메소드를 추가합니다.

public function isOnline()
{
return Cache::has('user-is-online-' . $this->id);
}

이제 어느 페이지에서나 다음 메소드를 추가할 수 있습니다.

 @if($user->isOnline())
 user is online!!
 @endif

중요 사항 - 모든 내용을 소개하려면 파일 상단에서 use를 사용하세요.

위 내용이 이 문제를 해결하는 데 도움이 되기를 바랍니다!

laravel 프레임워크와 관련된 더 많은 기술 기사를 보려면 laravel 튜토리얼 칼럼을 방문하세요!

위 내용은 Laravel은 사용자가 온라인 상태인지 추적하는 기능을 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제