그누보드4용 중복로그인 체크함수좀 봐주세요.

그누보드4용 중복로그인 체크함수좀 봐주세요.

QA

그누보드4용 중복로그인 체크함수좀 봐주세요.

본문

그누보드4용 중복로그인 체크해주는 PHP인데요.

https://sir.kr/g4_plugin/14670

 

여기에서 중복로그인이 되면 기존 로그인 했던 아이디와 새로 로그인 하는 아이디 모두 로그아웃되게 하고 싶은데 가능할까요?

"중복로그인입니다"란 메세지를 띄워주고, 아이디 2개 모두 로그아웃 되게 하고 싶거던요.

<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가

// ===========================================================
//    그누보드 g4 중복로그인 체크  v 0.1
//    Copyright(c) 2013 그누보드 닉 마스타 All rights reserved.
// ===========================================================

if ($member['mb_id']) {

    // 내 IP 가 아닌 다른 IP 에서 로그인 한 게 있는가?
    $tmp_sql = " select * from {$g4['login_table']} ";
    $tmp_sql .= "    where mb_id = '{$member['mb_id']}' and lo_ip <> '{$_SERVER['REMOTE_ADDR']}' ";
    $tmp_sql .= "    order by lo_datetime desc ";
    $tmp_row = sql_fetch($tmp_sql);

    if ($tmp_row['mb_id']) {
        // 다른 데서 로그인 된 정보가 있다..
        $tmp_ip_other = $tmp_row['lo_ip'];        // 로그인된 다른 곳의 IP

        // 중복로그인 저장 테이블을 없으면 만든다.
        $g4['login_dup_table'] = $g4['table_prefix'] . 'login_dup';        // 로그인 중복정보 테이블

        if(!sql_query(" DESC {$g4['login_dup_table']} ", FALSE)) {
            sql_query(" CREATE TABLE IF NOT EXISTS `{$g4['login_dup_table']}` (
                            `ld_id` int(11) NOT NULL AUTO_INCREMENT,
                            `mb_id` varchar(20) NOT NULL,
                            `ld_datetime` datetime NOT NULL,
                            `ld_ip_before` varchar(255) NOT NULL,
                            `ld_ip_after` varchar(255) NOT NULL,
                            `ld_status` varchar(255) NOT NULL,
                            PRIMARY KEY (`ld_id`)
                        ) ", FALSE);
        }

        // 내가 ip_before 에 걸린게 있는지 확인해 본다.
        $tmp_sql = " select * from {$g4['login_dup_table']} where mb_id = '{$member['mb_id']}' and ld_ip_before = '{$_SERVER['REMOTE_ADDR']}' and ld_status = '' ";
        $tmp_row = sql_fetch($tmp_sql);

        if ($tmp_row['mb_id']) {
            // 내가 ip_before 에 걸린게 있다. 나를 logout 시킨다.
            $tmp_sql = " update {$g4['login_dup_table']} set ld_status = 'logout_before' where ld_id = " . $tmp_row['ld_id'] . " ";
            sql_query($tmp_sql, FALSE);

            // 여기 IP 에서의 로그인 정보는 지워버린다. => 활동하면 다시 생기므로 지워도 상관없다.
            sql_query(" delete from {$g4['login_table']} where mb_id = '{$member['mb_id']}' and lo_ip = '{$_SERVER['REMOTE_ADDR']}' ");

            echo "<script>alert('" . $tmp_ip_other . " 에서 로그인 되어서, 현재 세션이 로그아웃됩니다.');</script>";
            echo "<script>location.href = '" . $g4['bbs_path'] ."/logout.php';</script>";
            break;    // 이걸 해주지 않으면, 어딘가에서 또 한 record 가 삽입되어 버린다.

        } else {

            // 중복로그인 정보를 입력한다.
            $tmp_sql = " insert into {$g4['login_dup_table']} ( mb_id, ld_datetime, ld_ip_before, ld_ip_after ) values ( '{$member['mb_id']}', '" . date("Y-m-d H:i:s", time()) . "', '" . $tmp_ip_other . "', '{$_SERVER['REMOTE_ADDR']}' ) ";
            sql_query($tmp_sql, FALSE);

            // 다른 IP 에서의 로그인 정보는 지워버린다. => 다른 곳에서 페이지 옮겨 다니면 다시 생기므로 지워도 상관없다.
            sql_query(" delete from {$g4['login_table']} where mb_id = '{$member['mb_id']}' and lo_ip <> '{$_SERVER['REMOTE_ADDR']}' ");

            echo "<script>alert('" . $tmp_ip_other . " 에서 로그인 된 정보가 있습니다.');</script>";

        }

        // 오래된 중복로그인 정보는 삭제한다. 5일 이전 데이타는 삭제한다.
        sql_query(" delete from {$g4['login_dup_table']} where ld_datetime < '" . date("Y-m-d H:i:s", strtotime("-5 day", time())) . "' ");

    }

}
?>
 

이 질문에 댓글 쓰기 :

답변 1

답변을 작성하시기 전에 로그인 해주세요.
전체 9
QA 내용 검색

회원로그인

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