중복로그인방지와 관련 질문입니다. > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

중복로그인방지와 관련 질문입니다. 정보

중복로그인방지와 관련 질문입니다.

본문

포토플라이님의 중복로그인팁과 관련하여 질문입니다.
http://www.sir.co.kr/bbs/tb.php/g4_tiptech/10498/7c2679503ee129ffae53a83900e1d7ba

- 중복로그인팁 적용 전
보통 로그인한 상태에서 로그아웃버튼을 클릭하지 않고 웹브라우저를 닫으면 로그아웃이 되는것 같습니다.(실제 로그아웃이 되는 것인지 아니면 로그아웃이 된 것처럼 보여지는 것인지는 모르겠습니다.)

- 중복로그인팁 적용 후
포토플라이님의 중복로그인팁을 적용 후 로그인한 상태에서 브라우저를 닫고(로그아웃버튼을 누르지않은 상태입니다)  다시 접속하여
아이디와 패스를입력하면 중복로그인이라는 메세지가 뜨는데 이것까지는 별문제는 없는데

로그아웃하지 않은 상태에서 브라우저를 닫고 몇 시간이 지나 다시 로그인해도 계속 중복로그인 메세지가 뜨는것이 불편한것 같습니다. 특정시간이 지나면 이 메세지가 안 떠야 정상일것 같은데요.

질문은 로그아웃버튼을 누르지 않아도 브라우저를 닫고 일정시간이(예: 2시간) 지나면
이와 같은 메세지가 뜨지않도록 할 수 있을까요?

 실제로 로그아웃하지 않은 상태에서 브라우저만 닫는 회원이 많을것 같은데 특정시간이 지나 로그인 시 계속 이 메세지가 뜬다면 불편하지 않을까 해서요.

skin/member/basic/login_check.skin.php의 내용 

 <?
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
// 자신만의 코드를 넣어주세요.
//중복로그인 방지 추가
//세션디렉토리 설정
$member_skin_path = "$g4[path]/skin/member/$config[cf_member_skin]";
$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])) {
//      alert("회원님은 접속중이십니다.\\n\\n중복으로 접속 하실수 없습니다.", "$member_skin_path/login_double.php?_POST[mb_id]=$_POST[mb_id]");//본창
    echo "<script language='javascript'>window.open('$member_skin_path/login_double.php?_POST[mb_id]=$_POST[mb_id]','','scrollbars=no,width=250,height=250,top=100,left=100');</script>";//팝업창

echo "<script language='javascript'>history.go(-1);</script>";

    exit;
    }
}
?>
  • 복사

댓글 전체

음..이미 되어있는거 아닌가요? common.php
//==============================================================================
// 공용 변수
//==============================================================================
// 기본환경설정
// 기본적으로 사용하는 필드만 얻은 후 상황에 따라 필드를 추가로 얻음
$config = sql_fetch(" select * from $lboard[config_table] ");

ini_set("session.cache_expire", 180); // 세션 캐쉬 보관시간 (분)
ini_set("session.gc_maxlifetime", 1440); // session data의 gabage collection 존재 기간을 지정 (초)

session_set_cookie_params(0, "/");
ini_set("session.cookie_domain", $lboard['cookie_domain']);

@session_start();

근데 창을 닫은 시점을 알수가 없잖아요.. 그시점에서 시간을 카운트하면될듯한데 말이죵..

아..맞다..서버에서 세션시간을 가져와서 현시점의 접속시간과 위의 타임을 비교해서 하면 될듯한데..음..재미있겠네요...한번 찾아봐야지..ㅋㅋ
저도 이 부분에 대해 테스트하고 있습니다. 앞으로 1시간이 지나면 결과를 알수 있을것 같습니다. 시간을 짧게 해서 테스트해봤는데 안되는것 같아서..
지워지죠..ㅎㅎ
전 set_session과 get_session 방법으로 테스트 해봤느데 되던데요
로그인 타임을 세션으로 저장해서 그놈을 가지고 현재시각과 비교해서(1시간이면 1시간) 지나면 data폴더의 session값을 지워버리라..그리고 destory했더니 지워지던데요..
로그인 체크 부분에
set_session('ss_mb_id_time', $lboard['time_ymdhis']); // 최초? 마지막 타임을 저장합니다.
그리고 이놈을 1시간 지속시킵니다. <-- 이방법은 아시죠? 위에 잇잖아요..

요놈은 최초 페이지에
$dd = get_session($ss_mb_id_name);
if($dd < 1시간){

session을 디스토리합니다. 지우셔도 됩니다.

}
이런식으로 테스트 했습니다.
답변에 감사드립니다.
if($dd < 1시간){
session을 디스토리합니다. 지우셔도 됩니다.
}
이부분은 어떻게 해야하는지요.

$dd = get_session($ss_mb_id_time);
    $test_time=$g4[server_time] - ( 60 * 60 * 1 );
    if($dd < $test_time){
    session_destroy();
    }
이게 맞나요.그리고 어디에 넣어야하나요.
그건 맞습니다. 저 위에도 제가 말씀드렸다시피 브라우져 닫을때의 세션시간은 알수가 없으니까요
그래서 로그인시점부터 시간을 카운터하여 1시간후 자동으로 세션을 없에는 방법을 위에 기술한건데..음... 많이 도움되지 못해 지성..
© SIRSOFT
현재 페이지 제일 처음으로