[그누보드용] 중복로그인 방지 TIP > 그누보드5 팁자료실

그누보드5 팁자료실

[그누보드용] 중복로그인 방지 TIP 정보

[그누보드용] 중복로그인 방지 TIP

본문

순서대로 적용하시면 됩니다.

 

01. 세션 저장할 디비생성 

 


CREATE TABLE user_sessions (
    mb_id VARCHAR(50) PRIMARY KEY,  -- 사용자 ID
    session_id VARCHAR(255) NOT NULL,  -- 세션 ID
    last_login_device VARCHAR(255),  -- 마지막 로그인 디바이스 정보
    last_login_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP  -- 마지막 로그인 시간
);

 

02. /bbs/login_check.php 에 세션 처리하는 부분

 


// 동시접속처리 관련 부분 시작 ----------------------------------------------------------- 
if( $mb['mb_id'] ) { 
    $sql = "DELETE FROM user_sessions WHERE mb_id = '".$mb['mb_id']."'";
    sql_query($sql);
    // 새로운 세션 ID 생성
    $session_id = session_id();  // 현재 세션 ID
    // 디바이스 정보(예: User-Agent) 추출 (선택사항)
    $last_login_device = $_SERVER['HTTP_USER_AGENT'];
    // 새로운 세션 정보 DB에 저장
    $sql = "INSERT INTO user_sessions (mb_id, session_id, last_login_device) 
            VALUES ('{$mb['mb_id']}', '{$session_id}', '{$last_login_device}')"; 
            
            //echo $sql;
            //exit;
            
    sql_query($sql);
    // 세션 쿠키를 통해 현재 세션 ID를 설정 (보통 PHP 세션을 사용하면 자동으로 설정됨)
    $_SESSION['session_id'] = $session_id; 
}
// 동시접속처리 관련 부분 끝 -----------------------------------------------------------

 

03. /common.php  에 기존로그인한 유저가 다른페이지로 이동했을때 세션체크하여 로그아웃시키는 부분


if ($member['mb_id']) {
    
    // ip 체크루틴
    $sqlDup="select count(*) as CNT from user_sessions ";
    $sqlDup.=" where mb_id='".$member['mb_id']."' and session_id='".$_SESSION['session_id']."'";
    $resultDup=sql_fetch($sqlDup);
    
    if($resultDup['CNT'] =="0"){
        
        //echo "<script>alert('중복로그인은 불가능합니다.');</script>";
        
        if(function_exists('social_provider_logout')){
            social_provider_logout();
        }
        // 이호경님 제안 코드
        session_unset(); // 모든 세션변수를 언레지스터 시켜줌
        session_destroy(); // 세션해제함
        // 자동로그인 해제 --------------------------------
        set_cookie('ck_mb_id', '', 0);
        set_cookie('ck_auto', '', 0);
        // 자동로그인 해제 end --------------------------------
        if($member['mb_level'] == '7'){
            $link = G5_URL.'/brandadm/';
        } else {
            if ($url) {
                if (substr($url, 0, 2) == '//')
                    $url = 'http:' . $url;
                $p = @parse_url(urldecode($url));
                /*
                    // OpenRediect 취약점관련, PHP 5.3 이하버전에서는 parse_url 버그가 있음 ( Safflower 님 제보 ) 아래 url 예제
                    // http://localhost/bbs/logout.php?url=http://sir.kr%23@/
                */
                if (preg_match('/^https?:\/\//i', $url) || $p['scheme'] || $p['host']) {
                    alert('url에 도메인을 지정할 수 없습니다.', G5_URL);
                }
                if ($url == 'shop')
                    $link = G5_SHOP_URL;
                else
                    $link = $url;
            } else if ($bo_table) {
                $link = G5_URL;//($bo_table);
            } else {
                $link = G5_URL;
            }
        }
        //run_event('member_logout', $link);
        //alert('새로운 기기에도 로그인되어 자동로그아웃처리 되었습니다.', $link);
        //goto_url($link);
        
        echo "<script>";
        echo "alert('새로운 기기에서 로그인되어 자동로그아웃처리 되었습니다.');";
        echo "location.href='".$link."'";
        echo "</script>";
        
    }
}
추천
10
  • 복사

댓글 4개

© SIRSOFT
현재 페이지 제일 처음으로