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

그누보드5 팁자료실

그누보드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);
?>

전체 2,742 |RSS
그누보드5 팁자료실 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT