Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP 세션 시작 여부 확인하는 방법 - 중복 session_start() 오류 방지하기

PHP에서는 내장 함수인 session_start()를 사용해 세션을 시작합니다. 그런데 한 가지 문제가 있습니다. 스크립트 실행 과정에서 이 함수를 두 번 이상 호출하면 에러가 발생한다는 점입니다. 따라서 session_start()를 중복 호출하지 않고도 세션이 이미 시작되었는지 확인하는 방법을 알아두면 유용합니다.

이 문제를 해결하는 대표적인 방법은 두 가지가 있습니다.

방법 1: session_id() 활용 (PHP 5.4.0 미만 버전)

PHP 5.4.0 미만 버전에서는 session_id() 함수의 반환값을 검사하는 방식으로 세션 시작 여부를 판단할 수 있습니다.

예제 코드

<?php
    if(session_id() == ''){
        session_start();
    }
?>

코드 설명

세션이 아직 시작되지 않은 경우 session_id()는 빈 문자열('')을 반환합니다. 따라서 위 코드는 세션이 시작되지 않았을 때만 session_start()를 호출하므로, 어떤 상황에서도 안전하게 세션을 시작할 수 있습니다.

방법 2: session_status() 활용 (PHP 5.4.0 이상 버전)

PHP 5.4.0부터 제공되는 session_status() 함수는 현재 세션의 상태를 정수 값으로 반환합니다. 반환되는 값은 모두 사전에 정의된 상수이며, 다음 세 가지입니다.

  • 0 – PHP_SESSION_DISABLED: 세션 기능이 현재 비활성화되어 있는 상태
  • 1 – PHP_SESSION_NONE: 세션 기능은 활성화되어 있지만 아직 세션이 시작되지 않은 상태
  • 2 – PHP_SESSION_ACTIVE: 세션 기능이 활성화되어 있고 세션이 이미 시작된 상태

예제 코드

<?php
    if (session_status() == PHP_SESSION_NONE) {
        session_start();
    }
?>

코드 설명

위 코드는 현재 세션 상태가 PHP_SESSION_NONE, 즉 세션이 아직 시작되지 않은 경우에만 session_start()를 호출합니다. 덕분에 함수가 여러 번 실행되더라도 중복 호출로 인한 에러 없이 세션을 안전하게 시작할 수 있습니다.

주의사항

session_status() 함수는 PHP 5.4.0 이상 버전에서만 동작합니다. 그 이하 버전의 환경이라면 앞서 소개한 session_id()를 이용한 첫 번째 방법을 사용해야 합니다.