[그누보드용] 중복로그인 방지 TIP 정보
[그누보드용] 중복로그인 방지 TIP
본문
순서대로 적용하시면 됩니다.
01. 세션 저장할 디비생성
CREATE TABLE user_sessions (
mb_id VARCHAR(50) PRIMARY KEY, -- 사용자 ID
session_id VARCHAR(255) NOT NULL, -- 세션 ID
last_login_device VARCHAR(255), -- 마지막 로그인 디바이스 정보
last_login_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- 마지막 로그인 시간
);
02. /bbs/login_check.php 에 세션 처리하는 부분
// 동시접속처리 관련 부분 시작 -----------------------------------------------------------
if( $mb['mb_id'] ) {
$sql = "DELETE FROM user_sessions WHERE mb_id = '".$mb['mb_id']."'";
sql_query($sql);
// 새로운 세션 ID 생성
$session_id = session_id(); // 현재 세션 ID
// 디바이스 정보(예: User-Agent) 추출 (선택사항)
$last_login_device = $_SERVER['HTTP_USER_AGENT'];
// 새로운 세션 정보 DB에 저장
$sql = "INSERT INTO user_sessions (mb_id, session_id, last_login_device)
VALUES ('{$mb['mb_id']}', '{$session_id}', '{$last_login_device}')";
//echo $sql;
//exit;
sql_query($sql);
// 세션 쿠키를 통해 현재 세션 ID를 설정 (보통 PHP 세션을 사용하면 자동으로 설정됨)
$_SESSION['session_id'] = $session_id;
}
// 동시접속처리 관련 부분 끝 -----------------------------------------------------------
03. /common.php 에 기존로그인한 유저가 다른페이지로 이동했을때 세션체크하여 로그아웃시키는 부분
if ($member['mb_id']) {
// ip 체크루틴
$sqlDup="select count(*) as CNT from user_sessions ";
$sqlDup.=" where mb_id='".$member['mb_id']."' and session_id='".$_SESSION['session_id']."'";
$resultDup=sql_fetch($sqlDup);
if($resultDup['CNT'] =="0"){
//echo "<script>alert('중복로그인은 불가능합니다.');</script>";
if(function_exists('social_provider_logout')){
social_provider_logout();
}
// 이호경님 제안 코드
session_unset(); // 모든 세션변수를 언레지스터 시켜줌
session_destroy(); // 세션해제함
// 자동로그인 해제 --------------------------------
set_cookie('ck_mb_id', '', 0);
set_cookie('ck_auto', '', 0);
// 자동로그인 해제 end --------------------------------
if($member['mb_level'] == '7'){
$link = G5_URL.'/brandadm/';
} else {
if ($url) {
if (substr($url, 0, 2) == '//')
$url = 'http:' . $url;
$p = @parse_url(urldecode($url));
/*
// OpenRediect 취약점관련, PHP 5.3 이하버전에서는 parse_url 버그가 있음 ( Safflower 님 제보 ) 아래 url 예제
// http://localhost/bbs/logout.php?url=http://sir.kr%23@/
*/
if (preg_match('/^https?:\/\//i', $url) || $p['scheme'] || $p['host']) {
alert('url에 도메인을 지정할 수 없습니다.', G5_URL);
}
if ($url == 'shop')
$link = G5_SHOP_URL;
else
$link = $url;
} else if ($bo_table) {
$link = G5_URL;//($bo_table);
} else {
$link = G5_URL;
}
}
//run_event('member_logout', $link);
//alert('새로운 기기에도 로그인되어 자동로그아웃처리 되었습니다.', $link);
//goto_url($link);
echo "<script>";
echo "alert('새로운 기기에서 로그인되어 자동로그아웃처리 되었습니다.');";
echo "location.href='".$link."'";
echo "</script>";
}
}
추천
10
10
댓글 4개

대박입니다
귀한 자료 감사합니다^^

감사합니다
너무너무 감사합니다.

감사합니다.