그누보드5 중복로그인(동시접속) 방지 코드(IP관계없이 ID 한개만 접속) 정보
그누보드5 중복로그인(동시접속) 방지 코드(IP관계없이 ID 한개만 접속)
본문
이전 접속자를 강제로 로그아웃 시키는 구조 입니다.
아래 소스를 skin/member/basic/login_check.skin.php 에 추가
<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
// 자신만의 코드를 넣어주세요.
//여기 아래에추가
$mb_id = $_POST['mb_id'];
$mb = get_member($mb_id);
$session_dir = session_save_path(); // PHP 실제 세션 저장 경로
$d = dir($session_dir);
$dup_killed = false; // 중복 로그인 세션 제거 여부
while (false !== ($entry = $d->read())) {
if (substr($entry, 0, 1) == '.' || $entry == 'index.php') continue;
$file = $session_dir . '/' . $entry;
if (!is_file($file)) continue;
$temp = file_get_contents($file);
if (!$temp) continue;
// PHP 직렬화 세션 내 아이디 확인 (문자열/배열 모두 대응)
if (
preg_match('`ss_mb_id\|s:\d+:\"' . preg_quote($mb['mb_id'], '`') . '\";`', $temp) ||
preg_match('`ss_mb_id\|a:\d+:\{.*\"' . preg_quote($mb['mb_id'], '`') . '\".*\}`s', $temp)
) {
unlink($file); // 기존 로그인 세션 삭제
$dup_killed = true; // 플래그 기록
}
}
if ($dup_killed) {
echo "<script>
alert('회원님의 아이디 {$mb['mb_id']} 는 기존 접속이 종료되고 새로운 접속으로 로그인 되었습니다.');
</script>";
}
?>
1. 회원이 로그인 중임 → 세션 존재
2. 같은 아이디로 다른 브라우저에서 로그인 → 기존 세션 파일 삭제됨
3. 새 로그인 성공 + 안내 알림창 표시
4. 기존 로그인 브라우저는 자동 로그아웃 처리됨
!-->
5
댓글 4개

감사합니다 ^^

이런 방식은 ..
<?php
include_once('./_common.php'); // 그누보드 공통 파일
$mb_id = isset($_POST['mb_id']) ? trim($_POST['mb_id']) : '';
if (!preg_match('/^[a-zA-Z0-9_]+$/', $mb_id)) {
alert('잘못된 요청입니다.');
}
$mb = get_member($mb_id);
if (!$mb['mb_id']) {
alert('회원 정보를 찾을 수 없습니다.');
}
// 중복 로그인 방지용 세션 키
$session_key = 'ss_mb_session_id';
// 현재 세션 ID
$current_session_id = session_id();
// 이전 세션 ID 조회
$prev_session_id = get_session($session_key);
// 이전 세션과 다르면 중복 로그인으로 판단
if ($prev_session_id && $prev_session_id !== $current_session_id) {
// 이전 세션 무효화 (DB 또는 캐시 기반으로 처리 가능)
// 여기서는 세션 키를 초기화
set_session($session_key, '');
// 현재 세션 갱신
session_regenerate_id(true);
$new_session_id = session_id();
set_session($session_key, $new_session_id);
alert("회원님의 아이디 " . htmlspecialchars($mb['mb_id'], ENT_QUOTES, 'UTF-8') . " 는 기존 접속이 종료되고 새로운 접속으로 로그인 되었습니다.");
} else {
// 최초 로그인 또는 동일 세션 유지
set_session($session_key, $current_session_id);
}
// 로그인 처리 후 이동
goto_url(G5_URL);
?>

감사 합니다.

감사합니다