개발 Q&A

제목 세션 관련 질문..
카테고리 PHP
글쓴이 페이 작성시각 2017/05/19 14:11:32
댓글 : 8 추천 : 0 스크랩 : 0 조회수 : 13473   RSS

로그인 후 gc() 실행시 활성화된 세션 정보도 삭제가 되고 있습니다..

처음에는 IE기반만 문제인줄 알았는데.. 알고보니 크롬 및 파폭도 같이 세션이 풀려서 로그인정보를 확인했더니 db에서 세션정보 삭제가 되더라구요.

 

그래서 gc()에 대해서 조금 찾아보았습니다.

 

function session_set_save_handler() 으로 실행이 되고
Class Session_database_driver 에서
public function gc($maxlifetime) 함수 실행 후 현재 시간과 비교하여 삭제되는 것으로 이해했습니다.

 

여기에서 row삭제 함수에서

return $this->_db->delete($this->_config['save_path'], 'timestamp < '.(time() - $maxlifetime));

이런 방식으로 처리 되고 있었습니다.

 

여기에서 $maxlifetime 은 Class Session 의 생성자에서 $this->_configure($params); 함수 실행으로 

$expiration = config_item('sess_expiration');

if (empty($expiration))
{
	$params['expiration'] = (int) ini_get('session.gc_maxlifetime');
}
else
{
	$params['expiration'] = (int) $expiration;
	ini_set('session.gc_maxlifetime', $expiration);
}

정의가 되어 있는거 같네요..

 

이런 형태로 되었을 경우 config 에서

$config['sess_expiration'] = 0; 

으로 처리시에는 php. ini 에 있는 gc_maxlifetime을 사용하고

session.gc_maxlifetime 1440

로 지정 되어 있다면 세션은 1440초 뒤에 db가 삭제가 되는게 맞는건가요 ...??

 

 

오늘 오전부터 줄곧 봐왔더니 머리가 어지럽네요 .. ;;

 

세션관련하여서는 ci 3.x 로 오면서 네거티브세션을 사용하여 이전에 있던 문제는 사라졌다고 알고 있는데..

혹 아래 말씀 드린 php버전에 의한 문제일까요...

아니면 php.ini 설정을 변경해야하는걸까요..

 

 

 

1. CI 3.0.1 기반의 시스템 수정한 상태입니다. (세션 관련 정보는 수정 안함)

2. php 5.3.8 기반 ( php 5.4가 권장인걸 나중에야 알게되었네요.  )

3. 웹서버, db서버 모두 시간은 현재시간으로 일치함

4 세션&쿠키 관련 config 정보


$config['sess_driver'] 			= 'database';
$config['sess_cookie_name'] 	= 'tbsessions';
$config['sess_expiration'] 		= 0;
$config['sess_save_path'] 		= 'tb_sessions';
$config['sess_match_ip'] 		= FALSE;
$config['sess_match_useragent'] = FALSE;
$config['sess_time_to_update'] 	= 0;
//$config['sess_time_to_update'] 	= 300;  //위 아래 설정 모두 같은 결과
$config['sess_regenerate_destroy'] = FALSE;

$config['cookie_prefix']	= '';
$config['cookie_domain']	= '.'.ZS_DOMAIN_NAME_FOR_COOKING; // 도메인정상처리중
$config['cookie_path']		= '/';
$config['cookie_secure']	= FALSE;
$config['cookie_httponly'] 	= FALSE;

 

 다음글 기간별 조회수를 구현하기 위한 SQL 구축 방법을 문의... (3)
 이전글 동일한 사이트에서 특정 하위 폴더에 접근한 경우에 다른... (2)

댓글

변종원(웅파) / 2017/05/19 15:31:00 / 추천 0

로그인후 gc를 호출하는 이유가 있을까요?

프레임워크단에서 자동으로 처리되는 부분인데 굳이 호출할 필요가 없습니다. 

로그인이 풀린다면 서버 또는 컴퓨터, 클라이언트의 시간을 확인해보세요.

 

페이 / 2017/05/19 15:34:44 / 추천 0

#웅파

gc를 제가 임의 호출하는게 아니고 자동 처리되었을 경우를 말씀드린거에요..

자동 호출될때 세션이 모두 삭제되어서 문의드린거거든요..

그리고 시간은 모두 확인했습니다 ㅜㅜ

변종원(웅파) / 2017/05/19 15:41:16 / 추천 0

페이/ userdata가 담겨있는 세션 말고 새로 세션이 셍성되지 않는지 체크해보세요.

(위 증상과 같다면 2점대의 세션문제와 동일합니다.)

페이 / 2017/05/19 15:48:38 / 추천 0

#웅파

새로 생성되지는 않고 활성화된 세션이 삭제가 됩니다.

사이트 접속자가 저 한명이라고 했을경우 gc 자동실행후 session db에 row가 없습니다.

 

변종원(웅파) / 2017/05/19 15:55:31 / 추천 0
로그로 삭제하는 sql을 남겨서 확인해보세요.
페이 / 2017/05/19 16:32:33 / 추천 0

#웅파

네 log_message 처리 했으니 좀 기다려봐야할거 같습니다.

근데 

$config['sess_time_to_update'] 	= 1200;

으로 변경 했더니 꽤 오랬동안 문제가 없는네요 ... 좀더두고 천천히 확인해볼게요

감사합니다 !

jcoop / 2017/05/19 23:04:09 / 추천 0

혹시 도움이 될까 해서 댓글 올려봅니다. PHP 7.1이상이던가, 그렇다면 코드이그나이터의 파일을 일부 수정해야 세션이 제대로 동작한다는 글을 본적이 있거든요. 제가 전에 그런 상황이었는데, 그 글을 보고 수정하니, 세션이 제대로 작동했습니다. 관련 링크걸어봅니다.

코드이그나이터 한국사용자 포럼,  CI 묻고 답하기 게시판에서 진이님의 글입니다.

글제목: [해결] 안녕하세요 ciboard 로그인후 세션 사라짐 질문입니다. 

링크: http://www.codeigniter-kr.org/bbs/view/qna?idx=17058&page=2&view_category=&lists_style=

또, 세션 접속시 php.ini의 셋팅.(세션이 끊길 경우.)

php.ini에서,

session.auto_start = 0

위의 방법을 여기 한국 사용자 포럼 게시판 검색해서 알아냈었네요.

 

해결이 되셨으면 좋겠습니다. 

페이 / 2017/05/22 09:01:45 / 추천 0

#jcoop

댓글 감사드립니다.

저도 확인 했던 글인지라 셋팅을 보았는데..

 

session.auto_start Off

 

으로 셋팅이 되어 있었네요 ㅜㅜ

글을 보긴했는데 php7 이라서 확인 안해봤었는데 말씀 주셔서 확인해보았네요 ㅎ

감사합니다