2026, 새로운 도약을 시작합니다.

그누보드5 중복로그인(동시접속) 방지 코드(IP관계없이 ID 한개만 접속)

이전 접속자를 강제로 로그아웃 시키는 구조 입니다.

아래 소스를 skin/member/basic/login_check.skin.php 에 추가

[code]

<?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>";
}
?>

[/code]

1. 회원이 로그인 중임 → 세션 존재
2. 같은 아이디로 다른 브라우저에서 로그인 → 기존 세션 파일 삭제됨
3. 새 로그인 성공 + 안내 알림창 표시
4. 기존 로그인 브라우저는 자동 로그아웃 처리됨

|

댓글 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);
?>

감사 합니다.

감사합니다

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

그누보드5 팁자료실

번호 제목 글쓴이 날짜 조회
공지 3년 전 조회 4,594
2711 2개월 전 조회 323
2710 2개월 전 조회 226
2709 2개월 전 조회 393
2708 2개월 전 조회 232
2707 2개월 전 조회 275
2706 2개월 전 조회 273
2705 2개월 전 조회 144
2704 2개월 전 조회 295
2703 2개월 전 조회 268
2702 2개월 전 조회 282
2701 2개월 전 조회 279
2700 2개월 전 조회 225
2699 2개월 전 조회 173
2698 2개월 전 조회 221
2697 2개월 전 조회 192
2696 2개월 전 조회 165
2695 3개월 전 조회 321
2694 3개월 전 조회 161
2693 3개월 전 조회 215
2692 3개월 전 조회 219
2691 3개월 전 조회 364
2690 3개월 전 조회 269
2689 3개월 전 조회 290
2688 3개월 전 조회 239
2687 3개월 전 조회 451
2686 3개월 전 조회 503
2685 3개월 전 조회 635
2684 3개월 전 조회 371
2683 3개월 전 조회 513
2682 3개월 전 조회 325
🐛 버그신고