G5 실시간 중복 로그인 차단 G5 OSFR 1.0.0 정보
G5 실시간 중복 로그인 차단 G5 OSFR 1.0.0- ii0000039210 자기소개 아이디로 검색 회원게시물
- 조회 442
- 댓글 24
관련링크
첨부파일
본문
메시지 브릿지를 이용한 G5 OSFR(One Session Force Logout) 기능은 그누보드 환경에서 한 계정으로 동시에 여러 세션에 로그인하는 것을 방지하고, 중복 로그인 발생 시 이전 세션을 자동으로 로그아웃시키는 기능입니다. 이를 통해 계정 공유나 무단 접근으로 인한 보안 위험을 줄일 수 있습니다.
이번 프로젝트에서는 브라우저별 세션 한계로 인해 동일 계정의 다중 로그인을 제어하기 위해 데이터베이스 기반 세션 추적 방식을 도입했습니다. 이를 통해 사용자가 어떤 브라우저나 기기에서 접속하든 실시간으로 로그인 상태를 확인하고, 중복 로그인 발생 시 이전 세션을 안전하게 종료할 수 있습니다.
그로인해서, 설치가 조금 번거롭습니다.
## 설치방법 ##
1. 다운로드 파일을 압축 푼 다음, 업로드 해주세요.
* 이전에 디자인원엑스에서 배포한 플러그인이 설치되었다면, 중복으로 스크립트가 에러가 생길수 있습니다. https://designonex.com/bbs/board.php?bo_table=dxnote&wr_id=9 링크 글을 읽어보시면, 플러그인 제작 방향을 이해하실 수 있습니다.
2. 파일 수정 (theme/head.sub.php)
run_event('head_sub');
<head></head> 사이에 위의 소스를 삽입해주세요.
2. 파일 수정 (theme/head.php)
<!-- OSFR -->
<div id="duplicateModal">
<div class="modal-content">
<h2>다른 기기에서 로그인되었습니다!</h2>
<p>자동 로그아웃까지 남은 시간:</p>
<div class="countdown" id="logoutCounter">10</div>
</div>
</div>
<body></body> 태그 안에 넣어주세요. 위쪽에 넣어주시면 좋을 듯 합니다.
3. 파일 수정 (bbs/login_check.php)
/* ---------------------------------------------------------
* ★ 추가: active_logins 테이블에 중복 로그인 상태 기록
* --------------------------------------------------------- */
$login_mb_id = $mb['mb_id'];
$session_id = session_id();
$now = date('Y-m-d H:i:s');
sql_query("
INSERT INTO active_logins (mb_id, session_id, last_login)
VALUES ('{$login_mb_id}', '{$session_id}', '{$now}')
ON DUPLICATE KEY UPDATE session_id = '{$session_id}', last_login = '{$now}'
");
/* --------------------------------------------------------- */
이 소스의 위치는
// 회원의 토큰키를 세션에 저장한다. /common.php 에서 해당 회원의 토큰값을 검사한다.
if(function_exists('update_auth_session_token')) update_auth_session_token($mb['mb_datetime']);
아래에 넣어주세요.
4. 파일 수정 (bbs/logout.php)
// ------------------------------------------------------------
// ★ 추가: active_logins 테이블에서 현재 로그인 기록 삭제
// ------------------------------------------------------------
if ($member['mb_id']) {
$session_id = session_id();
$mb_id = $member['mb_id'];
sql_query("DELETE FROM active_logins WHERE mb_id = '$mb_id' AND session_id = '$session_id'");
}
// ------------------------------------------------------------
이 소스는 include_once('./_common.php'); 아래 넣어주세요.
5. DB 생성
CREATE TABLE IF NOT EXISTS `active_logins` (
`mb_id` varchar(255) NOT NULL,
`last_login` datetime DEFAULT CURRENT_TIMESTAMP,
`session_id` varchar(255) DEFAULT NULL,
PRIMARY KEY (`mb_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
이젠 설치가 모두 끝났습니다.
## 사용방법 ##
1. PC에서 로그인
2. 모바일에서 로그인
3. PC에서 10초후 자동 로그아웃됩니다.
보안용으로 개발을 진행하고 있습니다. 회원가입 후 테스트 해주세요.
## 필독 공지 ##
지금부터는 JS 파일에서 절대 변경해서는 안 되는 핵심 설정에 대해 설명드리겠습니다.
이 부분은 메시지 브릿지 전체 기능의 기반이 되는 요소이므로, 반드시 끝까지 읽어주시길 바랍니다.
dx_plugin/core/head.sub.js.php 파일 안에는 메시지 브릿지 서버와 연결하기 위한 중요한 설정이 포함되어 있습니다.
특히 다음 소스에 포함된 빨간색 표시된것은 시스템이 올바르게 작동하기 위해 반드시 필요한 고정값이며, 단 한 글자라도 수정하면 안 됩니다.
이 값들은 메시지 브릿지를 이루는 중앙 WebSocket 서버 주소, 세션 그룹 고유 구분자, 실시간 인증 구조와 연결되어 있습니다,
ws = new WebSocket(`wss://designonex.com:14147/?group=이곳은어디`);
ws = new WebSocket(`wss://designonex.com:14147/?group=이곳은어디`);
이 URL에서 group= 뒤의 값은 메시지 브릿지에서 공간을 구분하는 고유 식별자 역할을 합니다.
즉, 이 부분은 사용자가 속한 ‘방(room)’입니다.
예를 들어, group 값에 내가 a를 할당하면, 다른 사용자가 같은 a를 사용할 경우 동일한 공간을 공유하게 됩니다.
따라서 내 계정과 세션만을 위한 ‘개인 공간’을 만들고 싶다면 유일한 값을 지정해야 합니다.
클라이언트에서는 보안을 위해서 토큰을 만들어야 안전한 서비스를 사용할 수 있습니다.
개발, 확장, 보안은 각각 클라이언트의 몫입니다.
메시지 브릿지(Message Bridge) 설명 : https://designonex.com/bbs/board.php?bo_table=real_time_bridge&wr_id=4
메시지 브릿지는 무료 서비스: https://designonex.com/bbs/board.php?bo_table=real_time_bridge&wr_id=9
메시지 브릿지 이용약관 : https://designonex.com/bbs/board.php?bo_table=real_time_bridge&wr_id=5
메시지 브릿지 무료 사용 약관 : https://designonex.com/bbs/board.php?bo_table=real_time_bridge&wr_id=10
!-->!-->!-->!-->!-->!-->
8
댓글 전체

멋집니다!! 수고많으셨습니다.
감사합니다.

오 좋은데요 ㅎㅎ 감사합니다.^

감사합니다.

감사합니다 ^^
감사합니다.
최고! 가장 고도화된 중복 로그인 차단입니다
감사합니다.

좋은 기능 감사합니다.
감사합니다.
[공지]
메시지 브릿지 1.2.0 기능패치하였습니다.
보안 개발에 서버에서 조금이나마 힘이 되주기 위해서 토큰을 발급하기로 했습니다.
https://designonex.com/bbs/board.php?bo_table=real_time_bridge&wr_id=14
감사합니다
감사합니다.

감사합니다
감사합니다.

감사 합니다.
감사합니다.

좋은 기능 공유 감사합니다.
감사합니다.

감사합니다.
감사합니다.

서버가 잘 버텨주나봐요.. 보통 이런거 만들면 잘 터져서..
윈도우 가상서버입니다. ^^ 좋은 서버 없어요
