중복로그인 방지 코드(IP 상관없이 세션으로 대체) > 영카트5 팁자료실

영카트5 팁자료실

중복로그인 방지 코드(IP 상관없이 세션으로 대체) 정보

중복로그인 방지 코드(IP 상관없이 세션으로 대체)

본문

중복로그인 초보자를 위한 팁입니다~
중복로그인 체크를 ip로 했을때 네트워크 변화가 있을때 끊기는 현상때문에 welcome 님의 글을 보고 만들어 봤습니다~
더 좋은 방법이 있으면 조언 부탁드립니다.

 

아래는 제가 만들어본 중복로그인 체크 방법입니다.

 

$g5['member_table'] 테이블에 'login_session' 필드 추가 여분 필드 추가하여 사용해도 무방합니다.
ALTER TABLE {$g5['member_table']} ADD login_session VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL;

--------------------  헤더나 푸터에 삽입 ----------------------
<?
if($member['mb_id'] != "") {
?>
<script type="text/javascript">
    <!--
    var get_con_suer = function() {

        $.ajax({
            type: "POST",
            url: "/bbs/ip_check.php",
            dataType: "html",
            success: function(responseText) {

                if (responseText == 'login_fail') {
                    alert(' 로그인 후 이용해주세요.');
                    location.href = "/bbs/login.php";
                }

                if (responseText == 'ip_fail') {
                    alert('중복 로그인 되어 로그아웃 되었습니다.');
                    location.href = "/bbs/login.php?ipcheck=fail";
                }

                setTimeout("get_con_suer()", "7000");

            },
            error: function(responseText) {
                return false;
            }
        });

    };


    get_con_suer();


    //
    -->
</script>

<?
    }
?>

----------------- /bbs/ip_check.php 파일 생성 -----------------

<?php
include_once('./_common.php');

if($member['mb_id'] == "") {
    $login_status = "login_fail"; 
    echo $login_status;
    exit;
}

// 어드민이면 패스
if($member['mb_id'] == "admin") {
    $ip_status = "ip_Success"; 
    echo $ip_status;
    exit;
}


if(!empty($member['mb_id'])){

    // 회원정보
    $sql = " select login_session from {$g5['member_table']} where mb_id= '".$member['mb_id']."' ";
    $mbl = sql_fetch($sql);

    $login_session            = $mbl['login_session'];

    if(get_session('login_session') == $login_session) {
        $ip_status = "ip_Success"; 
        echo $ip_status;
        exit;
    }else{
        $ip_status = "ip_fail"; 

        session_unset(); // 모든 세션변수를 언레지스터 시켜줌
        session_destroy(); // 세션해제함

        echo $ip_status;
        exit;
    }

}

?>

------------------- /bbs/login_check.php 대략 80줄 삽입 ----------------------


// 중복체크 로그인 접속 정보 저장
$login_session = getloginsession(12);
set_session('login_session', $login_session); //렌던값을 세션에 저장
$sql= " update {$g5['member_table']} set login_session = '$login_session' where mb_id = '{$mb['mb_id']}' ";
sql_query($sql);


------------------- /lib/common.lib.php 하단에 삽입 ----------------------

function getloginsession($codeLength, $codeString=""){

    $defaultString = "123456789";
    srand((double)microtime()*1000000); 

    if ( $codeString == "" ){ 
           $codeString = $defaultString; 
    }

   $length = strlen($codeString);

   for($i=0;$i<$codeLength;$i++)
  {
     $codeStr = rand(0,$length-1); 
     $resultStr .= substr( $codeString, $codeStr, 1 );
   }

  return $resultStr;
}


사용하시고자 하는 사이트에 입맛에 맞게 수정해서 사용하시면 될거 같습니다~

더운 날씨에 개발자님들 건강 유의하세요~^^

추천
7

댓글 5개

전체 392
영카트5 팁자료실 내용 검색

회원로그인

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