
브라우저는 브라우저 창을 닫을 때 세션 쿠키를 삭제한다. 서버는 가비지 컬렉션 작업이 실행될 때 세션 파일을 삭제한다. 결과적으로 세션은 예상보다 오래 지속될 수 있다.
웹 서버는 가비지 컬렉션garbage collection이라는 작업을 실행한다. 이것은 마지막 수정 날짜가 지정된 기간(디폴트는 24분)을 초과한 세션 파일을 삭제한다. 세션 파일이 삭제되면 브라우저가 세션 쿠키를 보내도 세션 데이터를 가진 파일을 찾을 수 없기 때문에 세션이 종료된다.
각 세션 파일에 접근했던 마지막 시간을 확인하고 오래된 세션 파일을 삭제하는 것은 서버 리소스를 잡아먹는 것이므로 너무 자주 수행하면 좋지 않다. 가비지 컬렉션 실행 빈도는 세션에 접근한 횟수에 따라 다르다. 따라서 방문이 잦지 않은 사이트에서는 몇 시간 또는 며칠 동안 가비지 컬렉션이 실행되지 않을 수도 있다.
세션은 사용자가 로그인한 시점을 기억하기 위해 종종 사용된다. 이런 경우 사용자에게는 로그아웃 옵션이 있어야 한다.
사용자가 브라우저 창을 닫지 않은 상태에서(그래서 브라우저가 계속해서 세션 쿠키를 보내고 있으며) 서버가 조용하면(가비지 컬렉션을 실행하지 않으면), 세션은 설계된 것보다 더 오래 지속될 수 있다.
이것은 사용자가 컴퓨터를 공유하는 상황에서 큰 문제가 된다. 왜냐하면 사용자가 로그아웃하지 않은 사용자의 계정으로 사이트를 사용할 수 있기 때문이다.
세션을 종료하려면 다음의 네 단계를 거쳐야 한다.
$_SESSION = [];
$params = session_get_cookie_params();
setcookie('PHPSESSID', '', time() = 3600, $params['path'], $params['domain'], $params['secure'], $params['httponly']);
session_destroy();
출처 - 존 두켓, <백엔드 프로그래밍을 위한 PHP & MySQL>, Jpub, 2022