개발 환경
PHP 5.6 / CI 2.1.0 ( 아직도 구버전을 .. ㅠㅠ )
현재 상황
쿠키가 초기화/만료 되지 않고, 로그아웃 버튼을 누르지 않는다면
계속해서 로그인이 유지되는 페이지를 구현하려고 합니다.
헌데, 만료시간을 넉넉하게 주었음에도 불구하고
페이지 이동시 간헐적으로 로그인이 풀리고 있습니다.
( 짧게는 수 분 ~ 길게는 수 시간 )
원인을 찾아보려고 구글링도 열심히 해보고
CI System - Session 파일 등도 천천히 읽어봤지만
도저히 이유를 모르겠습니다 ...
시도한 내용
1) config.php 값을 변경했습니다.
- sess_cookie_name = 'sess_cookie'
- sess_expiration = 86400 * 30
- sess_expire_on_close = FALSE
- sess_encrypt_cookie = FALSE
- sess_use_database = TRUE- sess_match_ip = FALSE
- sess_match_useragent = FALSE
- sess_time_to_update = 86400 * 30
- cookie_prefix = 'sitename_'
- cookie_diomain = '.site-domain.com'
- cookie_path = '/'
- cookie_secure = FALSE
2) 로그인 시 10분 주기로 AJAX 콜이 발생하기 때문에
AJAX 콜이 발생 됐을 때는 sess_update 함수를 실행하지 않게 했습니다.
if( ! $CI->input->is_ajax_request())
{
parent::sess_update();
}
3) php.ini 설정을 바꾸었습니다.
- session.cookie_lifetime = 86400
- session.gc_probability = 0
- session.gc_divisor = 1000
- session.gc_maxlifetime = 86400
- session.cache_expire = 1440
4) /system/libraries/Session.php 에서 로그를 찍어보았습니다.
- 쿠키에 있는 session_id 값으로 DB 세션이 조회는 되었습니다.
- 허나, $row->user_data는 비어있었습니다 ...
5) 글 작성 후 ci_sessions 테이블을 모니터링 하고 있었는데
기존 session_id 값이 삭제되고
user_data 항목이 빈 채로 새로운 session_id가 생겨난 것을 확인했습니다 ...
읽어 주셔서 감사합니다 (__)
해당 상황이 나타날때 db를 보시면 기존 세션이외에 한개가 더 생성되는데 그게 비어 있어서 그렇습니다.
세션쿠키명을 _가 들어가지 않은 다른 것으로 바꿔보세요. 포럼 검색해보시면 몇가지 방밥이 나옵니다. 하나씩 시도해보세요.