BOARD

강좌·기초

PHP 세션(SESSION) 관리 가이드: 생성, 사용 및 삭제

페이지 정보

profile_image
작성자 최고관리자
댓글 0건 조회 4회 작성일 26-10-08 15:52

본문

PHP 세션(SESSION) 관리 가이드: 생성, 사용 및 삭제

그누보드 운영과 PHP 웹 개발 과정에서 사용자 로그인 상태 유지 및 데이터 관리에 필수적인 PHP 세션의 개념부터 시작, 생성, 사용, 그리고 삭제하는 방법을 학습합니다.

PHP 세션 시작 방법 및 주의할 점

PHP에서 세션을 시작하려면 session_start() 함수를 호출해야 합니다. 사용자가 웹사이트에 접속한 뒤 서버에서 상태 정보를 유지하기 위해 이 함수를 호출하면, 새로운 세션을 생성하거나 기존 세션을 복원합니다.

호출 시 주의할 점

  • 출력 전 호출 필수: session_start() 함수를 호출하기 이전에는 어떤 내용도 브라우저로 출력되서는 안 됩니다. HTML 태그, echo 문, 공백 등 브라우저 출력이나 에코가 발생하기 전에 페이지 맨 위에서 호출해야 합니다. 그렇지 않으면 Warning: headers already sent 오류가 발생할 수 있습니다.
  • 중복 호출 방지: 동일한 파일에서 session_start()를 여러 번 실행하면 이미 세션이 실행되었다는 알림이 출력될 수 있으므로, session_id() 함수 등을 사용하여 생성된 세션이 있는지 확인한 후 세션을 시작하는 방식을 사용할 수 있습니다.
  • 세션 이름 변경 시 순서: 기본 세션 이름인 PHPSESSID 대신 일시적으로 이름을 변경하려면 session_name('변경할 이름')을 사용해야 하는데, 이 함수 역시 session_start()보다 위에 입력해야 오류 없이 작동합니다.

PHP 세션 변수 생성 및 사용 방법

PHP에서 세션을 이용해 사용자별 데이터를 저장하고 웹페이지 전반에 걸쳐 유지하려면 $_SESSION 슈퍼글로벌 배열을 사용합니다. 세션을 활용하려면 먼저 세션이 시작되어야 합니다.

1. 세션 시작하기

세션 관련 작업을 수행하기 전에는 반드시 session_start() 함수를 호출해야 합니다. 이 함수는 새로운 세션을 생성하거나 기존 세션에 연결하며, 함수를 호출하기 전에는 어떤 내용도 브라우저로 출력되어서는 안 됩니다.

2. 세션 변수 생성 및 저장하기

session_start() 함수로 세션을 시작한 후에는 슈퍼글로벌 변수인 $_SESSION에 배열 형태로 값을 할당하여 세션 변수를 생성할 수 있습니다. 일반 배열을 이용하듯이 세션 이름을 키값으로 지정하여 데이터를 저장합니다.

session_start(); // 세션 시작
$_SESSION['user_id'] = 'guest'; // 'user_id' 세션에 'guest' 값 저장

3. 세션 값 출력(사용)하기

저장했던 세션 변수를 사용할 때도 session_start() 함수로 세션이 시작된 상태여야 합니다. $_SESSION 슈퍼글로벌 변수를 그대로 이용하여 값을 불러오거나 출력할 수 있습니다.

session_start(); // 세션 시작
echo $_SESSION['user_id']; // 'user_id' 세션의 값 출력

PHP 세션 삭제 및 데이터 파기 방법

PHP에서 세션을 정리할 때는 목적에 따라 unset(), $_SESSION = array(), session_destroy()를 구분해서 사용해야 합니다. 세션 관련 작업을 수행하기 전에는 반드시 session_start() 함수를 먼저 호출해야 합니다.

1. 특정 세션 변수만 삭제 (unset)

  • 사용 목적: 여러 세션 변수 중 특정 변수 하나만 골라서 제거하고 싶을 때 사용합니다.
  • 사용 방법: unset($_SESSION['세션변수명']); 형태로 작성합니다.

2. 전체 세션 변수 초기화 ($_SESSION = array())

  • 사용 목적: 서버에 저장된 세션 파일 자체는 유지하면서 현재 스크립트 내에서 사용 중인 모든 세션 변수 값만 비우고 싶을 때 사용합니다.
  • 사용 방법: $_SESSION = array();를 실행하여 여러 개의 세션 변수가 담긴 배열을 빈 배열로 초기화합니다.
  • 참고사항: session_destroy() 함수는 $_SESSION 슈퍼글로벌 배열 자체를 직접 해제하지 않으므로, 완전한 초기화를 위해 빈 배열 대입을 함께 고려할 수 있습니다.

3. 서버에 저장된 모든 세션 데이터 파기 (session_destroy)

  • 사용 목적: 로그아웃 등 사용자의 세션 데이터를 완전히 끝내고 서버에 저장된 세션 파일을 삭제할 때 사용합니다.
  • 사용 방법: session_destroy();를 호출합니다.
  • 주의사항: session_destroy()는 서버의 세션 파일을 삭제하지만, 세션 ID가 저장된 브라우저의 쿠키나 $_SESSION 변수 자체를 곧바로 없애지는 않습니다. 따라서 쿠키 삭제나 변수 초기화 처리가 함께 필요할 수 있습니다.

상황별 판단 및 행동 가이드

  • 내 상황: PHP 세션을 이용해 로그인 상태 유지나 사용자 정보를 구현하려는 경우
  • 우선할 판단: 스크립트 실행 시 브라우저 출력보다 먼저 session_start()를 호출하고 있는지 확인합니다. 이미 세션이 시작되었는지 session_id()로 점검하여 중복 호출 오류를 방지합니다.
  • 다음 행동: $_SESSION 슈퍼글로벌 배열에 필요한 변수와 값을 할당하여 생성·사용하고, 로그아웃 등의 상황에서는 unset()이나 session_destroy()를 적용하여 세션 데이터를 정리합니다.

실전 FAQ

  • Q: session_start() 호출 시 headers already sent 오류가 발생합니다.
    • A: 함수 호출 이전에 HTML 태그, 공백, echo문 등이 브라우저로 출력되면 헤더가 이미 전송되어 오류가 발생합니다. 반드시 PHP 파일의 가장 첫 줄(<?php 바로 다음)에 session_start()를 배치해야 합니다.
  • Q: session_destroy()를 호출했는데도 세션 변수 값이 그대로 남아있습니다.
    • A: session_destroy()는 서버에 저장된 세션 데이터 파일을 파괴하지만 현재 메모리에 남아있는 $_SESSION 슈퍼글로벌 변수 자체를 곧바로 해제하지는 않습니다. 완전한 초기화를 원한다면 $_SESSION = array(); 처리를 함께 병행하는 것이 안전합니다.

함께 보면 좋은 글

참고자료

기타 참고자료

댓글목록

등록된 댓글이 없습니다.