크롬80버전 업데이트 영카트5 주요패치 확인! KCP/이니시스/LGU+ 결제 이슈 대응 패치입니다.

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

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

QA

SIR 제작의뢰 - 견적무료/익명보정/호스팅, DB 이전/단기개발. 이젠 ' 의뢰인'이 원하는 '제작자'에게만 연락처를 알릴 수 있습니다.

그누보드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())) . "' ");

    }

}
?>
 

이 글을 내 페이스북 계정으로 보내기 이 글을 내 트위터 계정으로 보내기

이 질문에 댓글 쓰기 :

답변을 작성하시기 전에 로그인 해주세요.
전체 84,012 | RSS
고마운 분의 도움으로 질문을 해결하셨다면, 채택을 눌러서 감사의 마음을 전하세요.
어떻게 질문해야 할지 모른다면 질문하는 방법을 읽어 보신후 질문해 보세요.
QA 내용 검색

회원로그인

(주)에스아이알소프트 (06253) 서울특별시 강남구 도곡로1길 14, 6층 624호 (역삼동, 삼일프라자) 대표메일:admin@sir.kr
사업자등록번호:217-81-36347 대표:홍석명 통신판매업신고번호:2014-서울강남-02098호 개인정보보호책임자:이총

© SIRSOFT