8. 세션 및 쿠키 (Sessions and Cookies)
세션 관리 (Managing Sessions)
세션은 서버에 사용자 정보를 저장하여 여러 페이지에 걸쳐 지속적인 사용자 상태를 관리할 수 있습니다. 각 사용자는 고유의 세션 ID를 통해 식별됩니다.
세션 시작
세션을 시작하려면 session_start()
를 호출해야 합니다. 이 함수는 세션을 시작하거나 기존 세션을 재개합니다.
<?php session_start(); // 세션 시작 $_SESSION["username"] = "JohnDoe"; echo "Session username is " . $_SESSION["username"]; ?>
세션 변수 설정 및 사용
세션 변수는 $_SESSION
슈퍼 글로벌 배열을 통해 설정하고 접근할 수 있습니다.
<?php session_start(); $_SESSION["username"] = "JohnDoe"; $_SESSION["email"] = "john@example.com"; echo "Username: " . $_SESSION["username"]; echo "Email: " . $_SESSION["email"]; ?>
세션 변수 제거
세션 변수는 unset()
함수를 사용하여 제거할 수 있습니다.
<?php session_start(); unset($_SESSION["username"]); ?>
세션 종료
세션을 완전히 종료하려면 모든 세션 변수를 제거하고 세션을 파기해야 합니다.
<?php session_start(); // 모든 세션 변수 제거 $_SESSION = array(); // 세션 쿠키 제거 if (ini_get("session.use_cookies")) { $params = session_get_cookie_params(); setcookie(session_name(), '', time() - 42000, $params["path"], $params["domain"], $params["secure"], $params["httponly"] ); } // 세션 파기 session_destroy(); ?>
쿠키 설정 및 사용 (Setting and Using Cookies)
쿠키는 클라이언트 측에 저장되는 작은 데이터 파일입니다. 쿠키는 주로 사용자를 식별하고 상태를 유지하는 데 사용됩니다.
쿠키 설정
setcookie()
함수를 사용하여 쿠키를 설정합니다. 이 함수는 HTTP 헤더를 통해 쿠키를 전송합니다.
<?php $cookie_name = "user"; $cookie_value = "JohnDoe"; setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); // 30일 동안 유효 ?>
쿠키 접근
쿠키는 $_COOKIE
슈퍼 글로벌 배열을 통해 접근할 수 있습니다.
<?php if(isset($_COOKIE["user"])) { echo "User is " . $_COOKIE["user"]; } else { echo "User is not set"; } ?>
쿠키 제거
쿠키를 제거하려면 만료 시간을 과거로 설정하면 됩니다.
<?php setcookie("user", "", time() - 3600, "/"); ?>
세션과 쿠키의 차이점 (Differences Between Sessions and Cookies)
- 저장 위치: 세션 데이터는 서버에 저장되며, 쿠키 데이터는 클라이언트(브라우저)에 저장됩니다.
- 보안: 세션은 서버 측에 저장되므로 더 안전합니다. 쿠키는 클라이언트 측에 저장되므로 변조될 위험이 있습니다.
- 수명: 세션은 사용자가 브라우저를 닫거나 세션을 명시적으로 종료할 때까지 지속됩니다. 쿠키는 설정된 만료 시간까지 지속됩니다.
- 데이터 크기: 세션은 서버 측에 저장되므로 데이터 크기에 제한이 거의 없습니다. 쿠키는 클라이언트 측에 저장되며, 보통 4KB 이하로 제한됩니다.
- 속도: 세션은 서버에 요청할 때마다 데이터를 불러오기 때문에 약간 느릴 수 있습니다. 쿠키는 클라이언트 측에 저장되므로 접근 속도가 더 빠릅니다.
이 외에도 세션과 쿠키를 조합하여 사용자 상태를 관리하거나, 특정 상황에 맞게 각각을 활용할 수 있습니다.