제목 | 세션 관련 질문.. | ||||
---|---|---|---|---|---|
카테고리 | PHP | ||||
글쓴이 | 페이 | 작성시각 | 2017/05/19 14:11:32 | ||
|
|||||
로그인 후 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을 사용하고
로 지정 되어 있다면 세션은 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
|
||
페이
/
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 댓글 감사드립니다. 저도 확인 했던 글인지라 셋팅을 보았는데..
으로 셋팅이 되어 있었네요 ㅜㅜ 글을 보긴했는데 php7 이라서 확인 안해봤었는데 말씀 주셔서 확인해보았네요 ㅎ 감사합니다 |
||
로그인후 gc를 호출하는 이유가 있을까요?
프레임워크단에서 자동으로 처리되는 부분인데 굳이 호출할 필요가 없습니다.
로그인이 풀린다면 서버 또는 컴퓨터, 클라이언트의 시간을 확인해보세요.