테스트 사이트 - 개발 중인 베타 버전입니다

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

· 2년 전 · 2056 · 5

중복로그인 초보자를 위한 팁입니다~
중복로그인 체크를 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;
}


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

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

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

댓글 5개

오감사합니다.
감사합니다.
https://sir.kr/g5_tip/15002?sfl=wr_subject%7C%7Cwr_content&stx=%EC%A4%91%EB%B3%B5
중복

감사합니다.

게시글 목록

번호 제목
1874
1873
1870
1862
1846
1845
1837
1835
1823
1787
1781
1777
1771
1750
1746
1743
1742
1738
1714
1710
1700
1699
1696
1694
1691
1684
1662
1659
1656
1637