중복로그인방지와 관련 질문입니다. 정보
중복로그인방지와 관련 질문입니다.본문
포토플라이님의 중복로그인팁과 관련하여 질문입니다.
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;
}
}
?>
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();
근데 창을 닫은 시점을 알수가 없잖아요.. 그시점에서 시간을 카운트하면될듯한데 말이죵..
아..맞다..서버에서 세션시간을 가져와서 현시점의 접속시간과 위의 타임을 비교해서 하면 될듯한데..음..재미있겠네요...한번 찾아봐야지..ㅋㅋ
//==============================================================================
// 공용 변수
//==============================================================================
// 기본환경설정
// 기본적으로 사용하는 필드만 얻은 후 상황에 따라 필드를 추가로 얻음
$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시간이 지나면 결과를 알수 있을것 같습니다. 시간을 짧게 해서 테스트해봤는데 안되는것 같아서..
테스트를 마쳤는데 3시간이 지나도 역시 안되는데요. 시간이 지나면 세션이 지워지는것이 아닌가요
지워지죠..ㅎㅎ
전 set_session과 get_session 방법으로 테스트 해봤느데 되던데요
로그인 타임을 세션으로 저장해서 그놈을 가지고 현재시각과 비교해서(1시간이면 1시간) 지나면 data폴더의 session값을 지워버리라..그리고 destory했더니 지워지던데요..
전 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을 디스토리합니다. 지우셔도 됩니다.
}
이런식으로 테스트 했습니다.
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();
}
이게 맞나요.그리고 어디에 넣어야하나요.
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시간후 자동으로 세션을 없에는 방법을 위에 기술한건데..음... 많이 도움되지 못해 지성..
그래서 로그인시점부터 시간을 카운터하여 1시간후 자동으로 세션을 없에는 방법을 위에 기술한건데..음... 많이 도움되지 못해 지성..
알면 알수록 복잡하기만 하네요^^: