English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
이 튜토리얼에서는 PHP 세션을 사용하여 일부 데이터를 서버에 일시적으로 저장하는 방법을 배웁니다.
쿠키를 사용하여 데이터를 저장할 수 있지만, 일부 보안 문제가 있습니다. 쿠키는 사용자 컴퓨터에 저장되므로, 공격자가 쿠키 내용을 쉽게 수정하여 유해한 데이터를 삽입할 수 있습니다.
또한, 브라우저가 서버로 URL을 요청할 때마다 웹사이트의 모든 쿠키 데이터가 요청에 자동으로 서버로 전송됩니다. 이는 사용자 시스템에 저장된 쿠키가 있다면, 이를 통해 공격자가 쿠키 내용을 수정하여 유해한 데이터를 삽입할 수 있으며, 이는应用程序을 손상할 수 있는 것을 의미합니다.5개의 쿠키가 있으며, 각 쿠키의 크기는4KB의 쿠키가 있으면, 브라우저는 사용자가 페이지를 볼 때마다 쿠키를 업로드해야 합니다.20KB의 데이터로, 이는 웹사이트의 성능에 영향을 미칠 수 있습니다.
PHP 세션을 사용하여 이 두 가지 문제를 해결할 수 있습니다. PHP 세션은 데이터를 사용자의 컴퓨터 대신 서버에 저장합니다. 세션 기반 환경에서는 각 사용자가 세션 식별자 또는 SID라는 독특한 번호로 식별됩니다. 이 독특한 세션 ID는 각 사용자가 서버에 저장된 정보(예: 이메일, 게시물 등)와 연결되도록 사용됩니다.
ヒント:세션 ID는 PHP 엔진이 무작위로 생성하며, 추측하기 어렵습니다. 또한, 세션 데이터가 서버에 저장되므로 각 브라우저 요청과 함께 전송할 필요가 없습니다.
세션 변수에 어떤 정보도 저장하기 전에 세션을 시작해야 합니다. 새 세션을 시작하려면 PHP session_start() 함수를 호출만 해야 합니다. 이 함수는 새 세션을 생성하고 사용자에게 독특한 세션 ID를 생성합니다.
다음 예제의 PHP 코드는 새 세션을 시작하는 것입니다.
<?php //세션 시작 session_start(); ?>
session_start() 함수는 먼저 기존 세션의 존재 여부를 확인합니다. 세션이 이미 시작되었으면 세션 변수를 설정하고, 아니라면 새로운 세션 ID를 생성하여 새 세션을 시작합니다.
주의:브라우저에서 스크립트가 생성한 어떤 출력 전에 페이지의 시작 부분에서 session_start() 함수를 호출해야 합니다. setcookie() 함수를 사용하여 쿠키를 설정할 때와 같습니다.
모든 세션 데이터를 $_SESSION[] 전역 배열로 키-값 쌍으로 저장할 수 있습니다. 세션의 유지 기간 동안 저장된 데이터에 접근할 수 있습니다. 다음 스크립트는 새로운 세션을 생성하고 두 개의 세션 변수를 등록하는 예제입니다.
<?php //세션 시작 중 session_start(); //세션 데이터 저장 $_SESSION["firstname"] = "Peter"; $_SESSION["lastname"] = "Parker"; ?>
우리가 이전 예제에서 같은 웹 도메인의 다른 페이지에서 설정한 세션 데이터에 접근하려면, session_start()을 호출하여 세션을 다시 생성하고, 해당 키를 $_SESSION 연관 배열에 전달만 해야 합니다.
<?php //세션 시작 중 session_start(); //세션 데이터 접근 echo 'Hi, ' . $_SESSION["firstname"] . ' ' . $_SESSION["lastname"]; ?>
위 예제의 PHP 코드는 다음과 같은 출력을 생성합니다.
Hi, Peter Parker
주의:동일한 페이지에서 세션 데이터에 접근하려면, 세션이 이미 페이지 상단에서 시작되었기 때문에 새로운 세션을 생성하지 않아도 됩니다.
어떤 세션 데이터를 제거하려면, 다음 예제와 같이 $_SESSION 연관 배열의 해당 키를 해제만 해야 합니다:
<?php //세션 시작 session_start(); //세션 데이터를 제거 중입니다 if(isset($_SESSION["lastname"])){ unset($_SESSION["lastname"]); } ?>
하지만, 완전히 세션을 파괴하려면 session_destroy() 함수를 호출만 해도 됩니다. 이 함수는 어떤 매개변수도 필요하지 않으며, 한 번 호출하면 모든 세션 데이터가 파괴됩니다.
<?php //세션 시작 session_start(); //세션 파괴 session_destroy(); ?>
주의:session_destroy() 함수를 사용하여 세션을 파괴하기 전에 세션 환경이 존재하지 않는 경우, 먼저 session_start() 함수를 사용하여 해당 세션 환경을 다시 생성해야 합니다.
각 PHP 세션은 시간 초과 값(초 단위로 계산됨)이 있으며, 이 값은 사용자 활동이 없는 경우 세션이 활성 상태로 유지되는 시간을 정합니다. 이 시간을 조정하려면 PHP 설정 파일(php.ini)에서 session.gc_maxlifetime 변수의 값을 변경할 수 있습니다.