본문으로 건너뛰기

PHP 세션 설정은 어떻게 조절하나요?

💡 요약 정리

  • CentOS 환경에서 PHP 세션 작동 방식을 php.ini 설정을 통해 조정할 수 있습니다.
  • session.save_handler, session.save_path, session.use_cookies 등 다양한 항목을 직접 설정할 수 있습니다.
  • 사용자 정의 핸들러(USER 방식)를 통해 DB 저장 등 고급 설정도 가능합니다.
  • session_set_save_handler(), session_save_path(), ini_set() 함수를 이용해 동적으로 설정할 수도 있습니다.

1. 설치 환경

  • CentOS 5.x (64bit)

2. PHP 세션 조절하기

PHP의 세션 설정은 php.ini 파일 내 설정값을 통해 조정할 수 있습니다. session 관련 주요 항목은 다음과 같습니다.

[Session]
; Handler used to store/retrieve data.
session.save_handler = files

; Argument passed to save_handler. In the case of files, this is the path
; where data files are stored. Note: Windows users have to change this
; variable in order to use PHP's session functions.
;
; As of PHP 4.0.1, you can define the path as:
;
;     session.save_path = "N;/path"
;
; where N is an integer. Instead of storing all the session files in
; /path, what this will do is use subdirectories N-levels deep, and
; store the session data in those directories. This is useful if you
; or your OS have problems with lots of files in one directory, and is
; a more efficient layout for servers that handle lots of sessions.
...
; Whether to use cookies.
session.use_cookies = 1

;session.cookie_secure =

; This option enables administrators to make their users invulnerable to
; attacks which involve passing session ids in URLs; defaults to 0.
; session.use_only_cookies = 1

; Name of the session (used as cookie name).
session.name = PHPSESSID

; Initialize session on request startup.
session.auto_start = 0

; Lifetime in seconds of cookie or, if 0, until browser is restarted.
session.cookie_lifetime = 0

; The path for which the cookie is valid.
session.cookie_path = /

; The domain for which the cookie is valid.
session.cookie_domain =
...

3. 주요 설정 항목 설명

session.save_handler

  • 기본적으로 Files 방식을 이용합니다.
  • session_module_name() 함수를 통해 현재 설정된 정보를 확인할 수 있습니다.
  • 공유 메모리를 사용하는 MM 방식과 USER 방식도 지원합니다.
  • USER 방식을 사용하는 경우, session_set_save_handler("함수명", "함수명", "함수명", "함수명", "함수명", "함수명") 형태로 콜백 함수를 정의하고 호출하여, 세션 데이터나 세션 ID 등을 데이터베이스에 보관할 수 있습니다.

session.save_path

  • 세션 파일 저장 경로를 의미합니다.
  • files 방식의 경우 기본 경로는 /tmp입니다.

session.use_cookies

  • 세션과 함께 쿠키를 사용할지를 설정하는 항목입니다.
  • 기본값은 사용(1)으로 설정되어 있으며, 쿠키를 사용하지 않으려면 0으로 설정합니다.
  • 일부 PHP 버전에서는 On, Off로 설정하기도 합니다.

session.name

  • 세션 ID를 쿠키에 저장한 경우, 이를 참조하기 위한 변수명입니다.
  • 기본값은 PHPSESSID입니다. $PHPSESSID로 세션 ID를 확인할 수 있습니다.

session.auto_start

  • PHP 시작과 동시에 세션을 자동 시작하도록 설정합니다.
  • 기본값은 0이며, 자동 시작하지 않도록 되어 있습니다.
  • 세션 사용 전에 session_start()를 호출해야 하며, 자동 시작하려면 값을 1로 설정합니다.
  • 일부 버전에서는 On, Off로 설정합니다.

session.cookie_lifetime

  • 세션 ID를 저장한 쿠키의 유효 시간을 설정합니다.
  • 기본값은 0이며, 브라우저 종료 시 자동 삭제됩니다.
  • session_set_cookie_params() 함수를 통해 유효 시간 변경이 가능하며, php.ini에서도 설정할 수 있습니다.

session.cookie_path

  • 쿠키가 적용될 유효 경로(디렉터리)를 설정합니다.
  • 기본값은 /이며, 모든 경로에서 사용 가능하도록 설정되어 있습니다.
  • session_set_cookie_params() 함수를 사용하여 디렉터리 적용 범위를 변경할 수 있습니다.

session.gc_maxlifetime

  • 사용되지 않는 세션 데이터를 삭제할 기준 시간(초)입니다.
  • 세션 ID가 아닌 세션 데이터가 삭제됩니다.
  • 기본값은 1440초이며, 이는 사용자가 1440초간 요청이 없을 때 세션 데이터를 자동 삭제하는 설정입니다.
  • 클라이언트의 접속 종료 여부를 확인할 수 없기 때문입니다.

session.cache_expire

  • 서버에 저장된 세션 ID의 활성화 시간입니다.
  • 클라이언트가 브라우저를 종료하면 서버가 연결 상태를 확인할 수 없으므로 세션 데이터를 미리 삭제하고, 세션 ID는 180분 후 삭제합니다.
  • 세션 ID 삭제를 방지하려면 php.ini 설정값을 변경해 시간을 늘릴 수 있습니다.

4. 세션 핸들링 예시

세션을 핸들링하려면 세션 저장 디렉터리를 별도로 설정할 수 있습니다.

session_save_path("저장디렉토리");

ini_set("session.cache_expire", 180); // 세션 유효시간 : 분

ini_set("session.gc_maxlifetime", 86400); // 세션 가비지 컬렉션(로그인시 세션지속 시간) : 초

참고자료

http://korcow.egloos.com/1705728