CI 묻고 답하기

제목 CI 세션 Core 질문 _sess_gc() 함수 관련
카테고리 CIBOARD
글쓴이 학학이 작성시각 2017/02/01 10:27:45
댓글 : 1 추천 : 0 스크랩 : 0 조회수 : 16997   RSS
Session.php

function _sess_gc()
	{
		if ($this->sess_use_database != TRUE)
		{ // 테이블 사용할 때만 
			return;
		}

		srand(time()); // 랜덤
		if ((rand() % 100) < $this->gc_probability) // 기본 5% 확률
		{ // 5% 확률로 세션 GC
			$expire = $this->now - $this->sess_expiration;

			$this->CI->db->where("last_activity < {$expire}");
			$this->CI->db->delete($this->sess_table_name);

			log_message('debug', 'Session garbage collection performed.');
		}
	}

 

CI 세션 Core 모듈에 위와 같은 함수가 있습니다. 제가 이해한 설명은 주석으로 대체합니다.

여기서 

$this->CI->db->where("last_activity < {$expire}"); 

이 라인의 해석이 궁금합니다.

DB의 `last_activity` 는 보통 1485913069 같은 Timestamp 값입니다.

 

$expire = $this->now - $this->sess_expiration; 

는 config.php 의 값으로 디폴트 7200 입니다.

1485913069  < 7200 

 

7200 보다 작은 `last_activity` 값이 존재할 수가 없는데 어떻게 만료된 세션을 삭제하는 건가요??

 

 

--------추가

db 에서 한 row의 `last_activity` 값을 엄청 예전으로 변경하고 테스트해보니 실제로 삭제되는 것을 확인했습니다.

근데 아직도 저 조건문이 이해가 되지 않습니다..

SELECT * FROM sessions WHERE last_activity < 7200;

다음과 같은 쿼리를 `last_activity` 를 어제로 수정하고 해도 select에 안나옵니다. ( 이건 뭐 당연한거 같습니다.)

* 사용된 `last_activity` 값 1485828526  ( 2017. 1. 31. 오전 11:08:46 )

 다음글 windows + CodeIgniter + iis 관련... (2)
 이전글 CI 세션 (DB) 로그인 여부 확인 시 세션 row ... (2)

댓글

학학이 / 2017/02/01 11:15:31 / 추천 0

자문자답

제가 멍청했네여.. 위의 코드에서

13번 라인 현재 시간에서 만료시간을 빼서 넣네요..