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

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

· 2년 전 · 2058 · 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
중복

감사합니다.

게시글 목록

번호 제목
1483
1481
1479
1474
1473
1463
1458
1457
1456
1452
1449
1448
1442
1441
1426
1411
1389
1388
1372
1359
1357
1355
1348
1347
1338
1332
1328
1313
1307
1303