2016-09-30 3 views
6

나는 사용자가 내 웹 사이트에서 온라인 상태인지 확인하려고합니다. 예를 들어 사용자가 사이트에 로그인하면 PHP 코드가 온라인이라는 db 행을 ' 1 ', 그는'0 '으로 로그 아웃합니다.사용자가 온라인 상태인지 확인하는 방법

하지만 사용자가 사이트를 종료하면 행이 업데이트되지 않으므로 사용자가 실제로 온라인 상태인지 어떻게 확인할 수 있습니까?

$_SESSION['logged_in'] = true; 

가 어떻게이 문제를 확인할 수 있습니다 :

로그인에는 다음이 포함 된 세션을 생성한다?

+0

당신이 continuas을 보낼 수 있습니다 페이스 북처럼 지연된 서버에 대한 Ajax 요청은 –

+1

@FastSnail Facebook이 가장 확실하게 ** 아닙니다 ** 그렇게합니다. – ceejayoz

+0

링크 된 복제물이 2011 년에 나온 것이므로 이제는 웹 소켓의 현재 표준 솔루션에 대한 언급이 없으므로이 질문을 다시 열었습니다. – ceejayoz

답변

5

이렇게하면 안됩니다. 모든 페이지 뷰에서 last_activity 열을 업데이트하고 10-15 분 내에 페이지 뷰가없는 사용자는 비활성으로 간주 할 수 있지만 사용자가 PHP 만 사용하여 사이트를 떠난 시점을 정확히 알 수있는 확실한 방법은 없습니다.

엄격한 요구 사항 인 경우 (예 : 채팅 응용 프로그램의 경우) 웹 소켓을 사용하여 실시간 통신을 조사해야합니다.

+0

웹 소켓에 대한 링크를 읽을 수있는 기회가 있으십니까? 채팅 응용 프로그램에 대해 수행 할 수있는 귀하의 권리 – user2452165

+0

https://www.google.com/search?q=websockets – ceejayoz

+0

ur 답변을 주셔서 감사합니다. websocket에 대해 자세히 알아 보겠습니다. :)하지만 이미 도움이되었습니다. – user2452165

2

게시 - 구독 패턴을 사용할 수 있습니다. 게시 - 구독 패턴이 무엇인지 이해해 봅시다.

publish–subscribe is a messaging pattern where senders of messages, called publishers, do not program the messages to be sent directly to specific receivers, called subscribers, but instead characterize published messages into classes without knowledge of which subscribers, if any, there may be. Similarly, subscribers express interest in one or more classes and only receive messages that are of interest, without knowledge of which publishers, if any, there are. 

출처 : 다음

Wikipedia이 RabbitMQ MQTT 어댑터를 사용하는 예입니다

"/ 주제/사용자는"주제에 사용자 A의 응용 프로그램을 구독 주제에 대한 사용자 B의 응용 프로그램 "/topic/user-b "온라인/오프라인 상태를 주제"/ topic/presence "에 게시합니다. "/ topic/presence"에 가입하려면 백엔드 서버에 프로그램을 작성하십시오. 사용자 A가 다음 사용자 A. 모든 친구들에게이 방법을 업데이트를 게시 말할 수에서 모든 업데이트를 제공하는 경우, 사용자 B는 방법에 게시를 위해 여기를

   User A    User B   PresenceListener 

Subscribe  /topic/user-a  /topic/presence /topic/presence 

Publish   /topic/user-b  /topic/presence friend list 

진짜 문제는 사용자 A의 온라인/오프라인 업데이 트를 받게됩니다 "오프라인". 한 가지 경우는 인터넷이 여전히 활성화 된 상태에서 사용자가 앱을 닫으면 앱이 서버에 '오프라인'상태를 게시 할 수 있지만 인터넷이 작동을 멈추면 어떻게됩니까?

"마지막 유언장"(lwt)을지나갑니다.

LWT 메시지는 클라이언트가 오프라인 상태인지 아닌지 여부를 감지하는 데 실제로 관심이 없습니다 (해당 작업은 keepAlive 메시지로 처리됩니다). LWT 메시지는 클라이언트가 오프라인 상태가 된 후에 어떤 일이 발생하는지에 대한 메시지입니다. 클라이언트가 오프라인이어서 더 이상 게시 할 수 없으므로 LWT 메시지를 활용하여 클라이언트를 대신하여 브로커에서 게시 할 메시지를 정의 할 수 있습니다.

출처 : http://tuanpm.net/what-is-mqtt/ 온라인 오프라인의 존재와 샘플 소스 코드에 대한

, 당신이 Github에서 사용할 수 우리의 Applozic 채팅 자바 스크립트 플러그인 코드를 체크 아웃 할 수 https://github.com/Applozic/Applozic-Web-Plugin/

데모 페이지 : https://www.applozic.com/docs/chat-examples/web.html

관련 문제