자동로그인 상태 유지 방법
본문
그누보드5를 이용한 커뮤니티 사이트를 운영중입니다.
회원분들이 자꾸 자동로그인 이 풀린다가 불만이 많습니다.
피씨보다는 모바일 접속이 더 많은 사이트입니다.
최소 1주일정도 최대 1달정도는 유지가 되었으면 하는데..어디를 어떻게 수정해야할까요?
서버는 카페24여서 세션부분을 연장해달라고 요청하니
아래와 같이 수정해주었습니다.
www 루트와 같은 경로에 있는 .htaccess 파일에서 다음과 같이 시간을 늘려 설정하였습니다.
session.cookie_lifetime 0
session.cache_expire 86400(24시간)
session.gc_maxlifetime 86400(24시간)
24시간이 최대라고 하네요.
commom.php 부분에서도 수정을 했습니다.
//==============================================================================
// SESSION 설정
//------------------------------------------------------------------------------
@ini_set("session.use_trans_sid", 0); // PHPSESSID를 자동으로 넘기지 않음
@ini_set("url_rewriter.tags",""); // 링크에 PHPSESSID가 따라다니는것을 무력화함 (해뜰녘님께서 알려주셨습니다.)
session_save_path(G5_SESSION_PATH);
if (isset($SESSION_CACHE_LIMITER))
@session_cache_limiter($SESSION_CACHE_LIMITER);
else
@session_cache_limiter("no-cache, must-revalidate");
ini_set("session.cache_expire", 44640); // 세션 캐쉬 보관시간 (분)
ini_set("session.gc_maxlifetime", 2678400); // session data의 garbage collection 존재 기간을 지정 (초)
ini_set("session.gc_probability", 1); // session.gc_probability는 session.gc_divisor와 연계하여 gc(쓰레기 수거) 루틴의 시작 확률을 관리합니다. 기본값은 1입니다. 자세한 내용은 session.gc_divisor를 참고하십시오.
ini_set("session.gc_divisor", 100); // session.gc_divisor는 session.gc_probability와 결합하여 각 세션 초기화 시에 gc(쓰레기 수거) 프로세스를 시작할 확률을 정의합니다. 확률은 gc_probability/gc_divisor를 사용하여 계산합니다. 즉, 1/100은 각 요청시에 GC 프로세스를 시작할 확률이 1%입니다. session.gc_divisor의 기본값은 100입니다.
session_set_cookie_params(0, '/');
ini_set("session.cookie_domain", G5_COOKIE_DOMAIN);
@session_start();
========================================================
config.php 에서 쿠키 도메인도 수정했습니다.
define('G5_COOKIE_DOMAIN', '.abcd.co.kr');
.해당도메인.co.kr
==================================
왕초보라 QNA에서 검색해서 비슷한질문답변들을 보고 할수있는것들은 해봤습니다만....
모바일이나 피시버전에서는 브라우저에 따라 로그인이 풀려버리는게 있고
피씨에세는 익스11은 쿠키저장이 20일로 설정되어있어서인지 아직 로그인이 유지가 되고 있습니다.
크롬은 몇시간도 안되 풀려버리구요.
모바일 아이폰에서도 기본브라우져 사파리에서도 브라우져 종료하고 다시 접속하면 풀려버립니다.
어떻게 해야 모바일버전, 피씨버전 브라우저에 상관없이 오래 유지가 될수 있을까요?
고수님들의 도움 부탁드립니다.
답변 4
그누보드의 자동로그인은 세션 보관 시간과는 관련이 없는 것으로 알고 있습니다.
자동로그인 시, 각 사용자의 접속기기에 쿠기(ck_mb_id와 ck_auto)를 저장해두고, 재 접속할 때 저장된 쿠키가 있는지 확인하여 로그인 인증을 하는 방식이기 때문입니다.
이런 점을 고려해 볼 때, 자동로그인이 자주 풀리는 이유는 쿠키로 저장된 값이 재접속 시에 서버에서 원하는 값이 아니기 때문일 겁니다.
이렇게 쿠키로 저장된 값과 서버에서 원하는 쿠키 값이 서로 달라지는 이유는
쿠기값(ck_auto)의 일부인 접속자 ip($_SERVER['REMOTE_ADDR']) 때문인 것으로 생각됩니다.
특히 모바일 환경(와이파이 사용 등...)에서 클라이언트 ip가 고정되기 어렵고, 무선 공유기를 사용하는 PC에서도 클라이언트 ip가 자주 바뀔 수 있기 때문에 쿠키 값이 서로 일치할 가능성이 낮아집니다.
다음과 같이 $_SERVER['REMOTE_ADDR'] 변수를 삭제하고 시행해 보세요.
./bbs/login_check.php 파일의 58번째 줄에 보면 다음과 같은 키 설정이 있습니다.
$key = md5($_SERVER['SERVER_ADDR'] . $_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT'] . $mb['mb_password']); // 이부분을 아래와 같이 수정
$key = md5($_SERVER['SERVER_ADDR'] . $_SERVER['HTTP_USER_AGENT'] . $mb['mb_password']); // $_SERVER['REMOTE_ADDR'] 변수 지움
그리고 common.php 파일의 367라인 부분도 수정
$key = md5($_SERVER['SERVER_ADDR'] . $_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT'] . $mb['mb_password']); // 이부분을 아래와 같이 수정
$key = md5($_SERVER['SERVER_ADDR'] . $_SERVER['HTTP_USER_AGENT'] . $mb['mb_password']); // $_SERVER['REMOTE_ADDR'] 변수 지움
선우님! 답변 감사합니다.
답변해주신대로 수정했습니다.
잘되는지 기달려 보겠습니다.
정말 모바일에서는 ip에 영향을 받는지 와이파이 상태에서 로그인 되어있다가 LTE존으로 바뀌니 로그인이 풀려버리더군요. 반대도 마찬가지로 풀려버리구요.
아마 선우님이 정확한 답변을 주신것 같아 일단 수정해서 테스트 해보겠습니다.
감사합니다.
저는 위에 알려준대로 하니 잘됩니다. 네이버앱에서 아이피 바꾸면서 접속하는데 안풀리고 계속 유지됩니다
안됩니다..