세션(2)

minah moon·2023년 8월 22일

PHP

목록 보기
37/58
post-thumbnail

세션의 수명

브라우저는 브라우저 창을 닫을 때 세션 쿠키를 삭제한다. 서버는 가비지 컬렉션 작업이 실행될 때 세션 파일을 삭제한다. 결과적으로 세션은 예상보다 오래 지속될 수 있다.

웹 서버는 가비지 컬렉션garbage collection이라는 작업을 실행한다. 이것은 마지막 수정 날짜가 지정된 기간(디폴트는 24분)을 초과한 세션 파일을 삭제한다. 세션 파일이 삭제되면 브라우저가 세션 쿠키를 보내도 세션 데이터를 가진 파일을 찾을 수 없기 때문에 세션이 종료된다.

각 세션 파일에 접근했던 마지막 시간을 확인하고 오래된 세션 파일을 삭제하는 것은 서버 리소스를 잡아먹는 것이므로 너무 자주 수행하면 좋지 않다. 가비지 컬렉션 실행 빈도는 세션에 접근한 횟수에 따라 다르다. 따라서 방문이 잦지 않은 사이트에서는 몇 시간 또는 며칠 동안 가비지 컬렉션이 실행되지 않을 수도 있다.

세션은 사용자가 로그인한 시점을 기억하기 위해 종종 사용된다. 이런 경우 사용자에게는 로그아웃 옵션이 있어야 한다.

사용자가 브라우저 창을 닫지 않은 상태에서(그래서 브라우저가 계속해서 세션 쿠키를 보내고 있으며) 서버가 조용하면(가비지 컬렉션을 실행하지 않으면), 세션은 설계된 것보다 더 오래 지속될 수 있다.

이것은 사용자가 컴퓨터를 공유하는 상황에서 큰 문제가 된다. 왜냐하면 사용자가 로그아웃하지 않은 사용자의 계정으로 사이트를 사용할 수 있기 때문이다.

세션을 종료하려면 다음의 네 단계를 거쳐야 한다.

  1. $_SESSION 슈퍼글로벌 배열을 빈 배열로 설정하여 세션 파일의 모든 데이터를 제거한다. 이것은 동일한 페이지에서의 이후 코드가 세션 파일의 값에 접근하지 못하게도 한다.
$_SESSION = [];
  1. 세 번째 단계에서 setcookie()를 사용하여 세션 쿠키를 업데이트할 것이다. 이때 사용되는 path, domain, secure, httponly 매개변수에 대한 인수는 쿠키를 생성했을 때 사용했던 것과 동일해야 한다. PHP의 session_get_cookie_params() 함수는 세션 쿠키가 생성될 때 이러한 매개변수에 사용할 값을 반환한다. 반환되는 값은 $params 변수에 배열로 저장된다.
$params = session_get_cookie_params();
  1. PHP의 setcookie() 함수는 세션 쿠키를 업데이트하는 데 사용된다. value 매개변수는 빈 문자열로 설정된다. 이것은 세션 쿠키의 세션 ID를 삭제한다. expires 매개변수는 브라우저가 이후 페이지를 요청할 때 쿠키를 서버로 보내는 것을 중지하도록 과거 날짜로 설정된다. 다른 모든 매개변수는 두 번째 단계에서 수집된 값을 사용하여 설정되며 $params 변수에 배열로 저장된다.
setcookie('PHPSESSID', '', time() = 3600, $params['path'], $params['domain'], $params['secure'], $params['httponly']);
  1. PHP의 session_destroy() 함수를 호출하여 세션 파일을 삭제하도록 PHP 인터프리터에 지시한다. PHP 인터프리터는 가비지 컬렉션이 파일을 삭제할 때까지 기다리지 않고 즉시 파일을 삭제한다.
session_destroy();





출처 - 존 두켓, <백엔드 프로그래밍을 위한 PHP & MySQL>, Jpub, 2022

0개의 댓글