중복로그인 막기 정보
중복로그인 막기본문
// 중복 로그인 방지 시작
$mb_id = $_POST[mb_id];
$mb = get_member($mb_id);
$session_dir = $g4['path'] . "/data/session";
$d = dir($session_dir);
while (false != ($entry = $d->read())) {
$temp = file($session_dir . '/' . $entry);
if (preg_match("`ss_mb_id\|[^;]*\"" . $mb[mb_id] . "\";`", $temp[0])) {
//세션디렉토리 설정
$session_dir = $g4['path'] . "/data/session";
$d = dir($session_dir);
while (false !== ($entry = $d->read())) {
if (substr($entry, 0, 1) != '.' && $entry != 'index.php'){
$temp = file($session_dir . '/' . $entry);
if (preg_match("`ss_mb_id\|[^;]*\"" . $mb[mb_id] . "\";`", $temp[0])) {
unlink($session_dir . '/' . $entry);
}
}
}
alert("회원님의 아이디 {$mb[mb_id]} 는 이미 접속 중입니다.\\n\\n보안상 중복으로 접속하실 수 없어 이전 접속을 종료합니다.\\n\\n이 경고창이 계속 발생할 경우 비밀번호 변경을 해주세요.\\n\\n비밀번호 변경 후 지속적으로 이 경고창이 발생할 경우 관리자에게 문의해주세요.", $g4[path]);
}
}
// 중복 로그인 방지 끝
출처 : https://sir.kr/g4_tiptech/10498 (PhotoFly 님)
오래전에 팁이라서 그런지 안되서 살작 고쳐서 사용중인 방법 입니다.
skin/member/login_check.skin.php 에 추가만 해주면 됩니다.
추천
0
0
댓글 9개
올려주신 소스는 그누보드 4로 작성 된 소스이군요.
그누보드 5에 적용가능한 소스로 수정했습니다.
// 중복 로그인 방지 시작 ----- {
$mb_id = $_POST[mb_id];
$mb = get_member($mb_id);
$session_dir = G5_DATA_PATH."/session";
$d = dir($session_dir);
while (false != ($entry = $d->read())) {
$temp = file($session_dir . '/' . $entry);
if (preg_match("`ss_mb_id\|[^;]*\"" . $mb[mb_id] . "\";`", $temp[0])) {
//세션디렉토리 설정
$session_dir = G5_DATA_PATH."/session";
$d = dir($session_dir);
while (false !== ($entry = $d->read())) {
if (substr($entry, 0, 1) != '.' && $entry != 'index.php'){
$temp = file($session_dir . '/' . $entry);
if (preg_match("`ss_mb_id\|[^;]*\"" . $mb[mb_id] . "\";`", $temp[0])) {
unlink($session_dir . '/' . $entry);
}
}
}
alert("회원님의 아이디 {$mb[mb_id]} 는 이미 접속 중입니다.\\n\\n보안상 중복으로 접속하실 수 없어 이전 접속을 종료합니다.\\n\\n이 경고창이 계속 발생할 경우 비밀번호 변경을 해주세요.\\n\\n비밀번호 변경 후 지속적으로 이 경고창이 발생할 경우 관리자에게 문의해주세요.", G5_URL);
}
}
// ----- } 중복 로그인 방지 끝
위 소스를
/theme/적용할테마명/skin/member/login_check.skin.php 에 추가하시면 동작됩니다.
그누보드 5에 적용가능한 소스로 수정했습니다.
// 중복 로그인 방지 시작 ----- {
$mb_id = $_POST[mb_id];
$mb = get_member($mb_id);
$session_dir = G5_DATA_PATH."/session";
$d = dir($session_dir);
while (false != ($entry = $d->read())) {
$temp = file($session_dir . '/' . $entry);
if (preg_match("`ss_mb_id\|[^;]*\"" . $mb[mb_id] . "\";`", $temp[0])) {
//세션디렉토리 설정
$session_dir = G5_DATA_PATH."/session";
$d = dir($session_dir);
while (false !== ($entry = $d->read())) {
if (substr($entry, 0, 1) != '.' && $entry != 'index.php'){
$temp = file($session_dir . '/' . $entry);
if (preg_match("`ss_mb_id\|[^;]*\"" . $mb[mb_id] . "\";`", $temp[0])) {
unlink($session_dir . '/' . $entry);
}
}
}
alert("회원님의 아이디 {$mb[mb_id]} 는 이미 접속 중입니다.\\n\\n보안상 중복으로 접속하실 수 없어 이전 접속을 종료합니다.\\n\\n이 경고창이 계속 발생할 경우 비밀번호 변경을 해주세요.\\n\\n비밀번호 변경 후 지속적으로 이 경고창이 발생할 경우 관리자에게 문의해주세요.", G5_URL);
}
}
// ----- } 중복 로그인 방지 끝
위 소스를
/theme/적용할테마명/skin/member/login_check.skin.php 에 추가하시면 동작됩니다.
@카알주 적용해 보니 완벽합니다 ^^
관리자 제외시 코드 부탁 드려도 될까요 ?
관리자 제외시 코드 부탁 드려도 될까요 ?
@sosososo 관리자를 인식하는 부분이 각자의 프로그램마다 다를 듯해서 기본적인 원리 부터 적어보겠습니다.
1) 원리는 간단합니다.
while문을 통해 중복 로그인인지 아닌지를 찾도록 되어 있습니다.
따라서 관리자로 인식되면
while 문 이하를 실행하지 않으면 됩니다.
2) 관리자 인식
특정 ID를 인식할 수도 있고, 계정의 Level로 인식 할수도 있고, 슈퍼유저를 관리자로 인식하는 방법도 있고... 관리자 인식방법은 다양합니다.
계정의 Level 등급이 9이상이면 관리자로 인식하다고 가정하면
// 중복 로그인 방지 시작 ----- {
$mb_id = $_POST[mb_id];
$mb = get_member($mb_id);
if ($mb['level'] < 9) {
$session_dir = G5_DATA_PATH."/session";
$d = dir($session_dir);
while (false != ($entry = $d->read())) {
$temp = file($session_dir . '/' . $entry);
if (preg_match("`ss_mb_id\|[^;]*\"" . $mb[mb_id] . "\";`", $temp[0])) {
//세션디렉토리 설정
$session_dir = G5_DATA_PATH."/session";
$d = dir($session_dir);
while (false !== ($entry = $d->read())) {
if (substr($entry, 0, 1) != '.' && $entry != 'index.php'){
$temp = file($session_dir . '/' . $entry);
if (preg_match("`ss_mb_id\|[^;]*\"" . $mb[mb_id] . "\";`", $temp[0])) {
unlink($session_dir . '/' . $entry);
}
}
}
alert("회원님의 아이디 {$mb[mb_id]} 는 이미 접속 중입니다.\\n\\n보안상 중복으로
접속하실 수 없어 이전 접속을 종료합니다.\\n\\n이 경고창이 계속 발생할 경우 비밀번호 변경을 해주세요.\\n\\n비밀번호 변경 후 지속적으로 이 경고창이 발생할 경우 관리자에게 문의해주세요.", G5_URL);
}
}
}
// ----- } 중복 로그인 방지 끝
위 소스를
/theme/적용할테마명/skin/member/login_check.skin.php 에 추가하시면 동작 됩니다.
위와 같이 작성하시면 됩니다.
1) 원리는 간단합니다.
while문을 통해 중복 로그인인지 아닌지를 찾도록 되어 있습니다.
따라서 관리자로 인식되면
while 문 이하를 실행하지 않으면 됩니다.
2) 관리자 인식
특정 ID를 인식할 수도 있고, 계정의 Level로 인식 할수도 있고, 슈퍼유저를 관리자로 인식하는 방법도 있고... 관리자 인식방법은 다양합니다.
계정의 Level 등급이 9이상이면 관리자로 인식하다고 가정하면
// 중복 로그인 방지 시작 ----- {
$mb_id = $_POST[mb_id];
$mb = get_member($mb_id);
if ($mb['level'] < 9) {
$session_dir = G5_DATA_PATH."/session";
$d = dir($session_dir);
while (false != ($entry = $d->read())) {
$temp = file($session_dir . '/' . $entry);
if (preg_match("`ss_mb_id\|[^;]*\"" . $mb[mb_id] . "\";`", $temp[0])) {
//세션디렉토리 설정
$session_dir = G5_DATA_PATH."/session";
$d = dir($session_dir);
while (false !== ($entry = $d->read())) {
if (substr($entry, 0, 1) != '.' && $entry != 'index.php'){
$temp = file($session_dir . '/' . $entry);
if (preg_match("`ss_mb_id\|[^;]*\"" . $mb[mb_id] . "\";`", $temp[0])) {
unlink($session_dir . '/' . $entry);
}
}
}
alert("회원님의 아이디 {$mb[mb_id]} 는 이미 접속 중입니다.\\n\\n보안상 중복으로
접속하실 수 없어 이전 접속을 종료합니다.\\n\\n이 경고창이 계속 발생할 경우 비밀번호 변경을 해주세요.\\n\\n비밀번호 변경 후 지속적으로 이 경고창이 발생할 경우 관리자에게 문의해주세요.", G5_URL);
}
}
}
// ----- } 중복 로그인 방지 끝
위 소스를
/theme/적용할테마명/skin/member/login_check.skin.php 에 추가하시면 동작 됩니다.
위와 같이 작성하시면 됩니다.
@카알주 명료한 답변 감사 드립니다 ^^ 행복한 하루 보내세요 ~~
@카알주 혹시 이전 접속을 종료하는 것이 아니라 새로 로그인하는 행위가 방지되고 기존 접속은 유지되도록 할 수 있는 방법이 있을까요?
기존 접속을 계속 유지하도록 해봤는데 브라우저를 닫아도 세션이 사라지지 않아서 새로 브라우저를 실행해서 로그인하려고 해도 남아있는 세션으로 인해 로그인이 되지 않더라구요..
기존 접속을 계속 유지하도록 해봤는데 브라우저를 닫아도 세션이 사라지지 않아서 새로 브라우저를 실행해서 로그인하려고 해도 남아있는 세션으로 인해 로그인이 되지 않더라구요..
$temp = file($session_dir . '/' . $entry); 이 부분에서
Parse error: syntax error, unexpected ' ' (T_STRING) in D:\AutoSet10\public_html\szpz\api\api.login_frm.php on line 25 이런 에러가 나오면 어떻게 해야 할까요 ㅜ.ㅜ
Parse error: syntax error, unexpected ' ' (T_STRING) in D:\AutoSet10\public_html\szpz\api\api.login_frm.php on line 25 이런 에러가 나오면 어떻게 해야 할까요 ㅜ.ㅜ
중복로그인 막기
중복로그인 방지 5버전도 있음
그누보드 5.4.5.5
php 8
제가 pc,핸폰,각종브라우저로 테스트해보면 동시접속이 안되는데
간혹 스마트폰 2개가 동시 접속 되는 사람들이 있습니다.
혹시 어떤 경우에 이런게 가능할지 알수 있을까요?