PHP 세션 유지 시간 설정에 대한 잘못된 정보

 

구글에서 PHP 세션 유지 시간 설정에 대한 정보를 검색하면 나오는 내용 중 하나가 session.cache_expire 설정을 변경하는 것입니다. 그러나, 이것은 잘못된 정보입니다.

session.cache_expire는 http 헤더의 캐시 만료 시간을 설정하는 것이지 세션 유지 시간 설정하고는 기본적으로는 관련없는 것입니다. 거기에 이 설정에 영향을 미치는 session.cache_limiter의 기본값이 nocache로 되어 있기 때문에 기본 설정하에서는 이것의 값을 바꾸는 것은 의미가 없습니다.

PHP에서 세션 유지 시간은 session.gc_maxlifetime에서 설정합니다. 기본값은 1440초(24분)입니다. 이 설정은 서버에 있는 세션 파일이 삭제 대상이 되는 시간을 설정하는 것인데 아무 행동을 하지 않고 24분이 지나면 삭제 대상이 되는 것이죠. 다만, 서버 세션 파일의 삭제는 서버 부하를 줄이기 위해 무조건 삭제되는 것은 아니고 session.gc_probability,session.gc_divisor 이 두 설정에 따른 확률로 삭제가 됩니다. 두 설정의 기본값에 따르면 서버의 삭제 프로세스가 돌아갈때 1%의 확률로 세션 파일이 삭제가 됩니다.

데비안 리눅스 계열의 경우 이 부분에서 약간 다른 것이 있는데 데비안 리눅스의 PHP 기본 설정으로는 이 서버 세션 파일 삭제 기능을 꺼놓고 cron에 별도 파일을 지정해 매시간 9분과 39분에 삭제 프로세스가 돌아가게 되어 있습니다.