2016-07-12 3 views
1

express.js & socket.io과 채팅하려고합니다. 현재 내 채팅 사용자는 동일한 브라우저에서 여러 탭을 열 수 있으며 모든 탭에서 채팅 할 수 있습니다. 즉, 동일한 클라이언트가 동시에 몇 명과 채팅 할 수 있습니다. 이 문제를 방지하고 싶습니다.socket.io에서 동일한 클라이언트를 감지하는 방법

나는 때마다 채팅을 연결에서 클라이언트를 방지하려면 :

1) 클라이언트가

2) 클라이언트가 다른 브라우저를 열어 같은 브라우저에 다른 탭에서 작동하며 그들을 작동

어떻게 할 수 있습니까? 감사합니다.

답변

0

쿠키를 사용하여 특정 브라우저를 식별함으로써 동일한 브라우저의 다른 탭에서 동일한 사용자를 검색 할 수 있습니다. 처음 연결 (socket.io 또는 특급 요청)시 고유 한 쿠키 식별자를 설정 한 다음 후속 연결에서 해당 고유 쿠키 식별자가 이미 사용 중인지 확인합니다. 특정 애플리케이션에서 "사용 중"이 의미하는 것을 정의해야합니다. socket.io 연결의 경우, 현재 활성 연결이 있음을 의미하기 때문에 조금 더 쉽습니다. 익스프레스 요청의 경우 요청이 일시적이기 때문에 좀 더 어렵습니다. 따라서 서로 다른 탭의 차이점을 나타내는 방법과 새 페이지로 이동하는 탭 하나를 결정해야합니다 (앱 별 방법).

여러 브라우저를 검색하려면 사용자 인증이 있어야하며 사용자가 여러 계정을 만들지 않거나 같은 사용자가 여러 계정을 만들지 못하도록하는 시스템이 있다고 가정해야합니다. 이전 예제에서와 같이 쿠키에 계정 인증 증명서를 사용하여이 사용자의 세션이 이미 사용 중인지 여부를 알 수 있습니다.

+0

우선, 도움에 감사드립니다 !!! 당신이 옳은 첫 번째 경우 - 쿠키 또는 세션은 동일한 브라우저에서 작동하지만 여러 탭에서 작동하는 동일한 사용자를 탐지하는 데 충분합니다. 하지만 두 번째의 경우 나는 사용자 인증을 제공하고 싶지 않습니다. 여러 개의 브라우저에서 작동하는 동일한 클라이언트를 감지 할 수있는 채팅을 보았는데이 채팅은 사용자 인증없이 작동합니다. 나는 똑같이하고 싶다. – Emil

+0

나는 내 문제에 대한 하나의 해결책을 찾았다 고 생각한다. 우리가'socket.handshake.address'를 사용하여 클라이언트의 IP 주소를 얻는다면, 우리는 같은 기계에서 소켓을 통해 연결을 열 때마다이 클라이언트를 탐지 할 수 있습니다. – Emil

+1

@Emil - 프록시 및 NAT와 사설망의 사용자 때문에 IP 주소가 단일 사용자와 고유하게 일치한다는 보장이 없습니다. 웹 사이트에서는 가정용 라우터의 NAT 때문에 동일한 IP 주소로 모든 사용자를 자신의 컴퓨터에있는 모든 집에서 볼 수 있습니다. 기업 사용자에게도 마찬가지입니다. 따라서 IP 주소 만 사용하면 같은 사설망에있는 다른 누군가가 서비스를 사용하고 있기 때문에 사용자가 처음으로 연결을 거부하게됩니다. 너의 설명에 대해 – jfriend00

관련 문제