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

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!

영카트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