본문 바로가기
PHP

[PHP] 쿠키와 세션 다루기

by teamnova 2024. 3. 11.

 


웹 개발에서 사용자의 정보를 임시로 저장하거나 사용자별로 다른 내용을 보여주기 위해 쿠키(Cookie)와 세션(Session)이 자주 사용됩니다. PHP는 이러한 기능을 구현하기 위해 간편하게 사용할 수 있는 내장 함수를 제공합니다. 이 포스팅에서는 PHP에서 쿠키와 세션을 다루는 기본적인 방법에 대해 알아보겠습니다.

쿠키(Cookie)
쿠키는 클라이언트의 컴퓨터에 저장되는 작은 텍스트 파일로, 사용자가 웹사이트를 방문할 때마다 서버에 의해 읽힐 수 있습니다. 쿠키를 사용하면 사용자의 선호도 저장, 로그인 상태 유지 등 다양한 기능을 구현할 수 있습니다.

쿠키 설정하기
PHP에서 쿠키를 설정할 때는 setcookie() 함수를 사용합니다. 이 함수는 여러 매개변수를 받을 수 있는데, 가장 기본적인 형태는 쿠키의 이름과 값, 그리고 만료 시간을 설정하는 것입니다.

<?php
// 쿠키 설정 예제
$cookie_name = "user";
$cookie_value = "John Doe";
// 쿠키의 만료 시간을 현재 시간에서 1시간 후로 설정
$expire_time = time() + (60 * 60); 

setcookie($cookie_name, $cookie_value, $expire_time, "/"); // '/'는 사이트 전체에서 쿠키가 사용될 수 있음을 의미
?>



쿠키 접근하기
쿠키는 $_COOKIE 슈퍼글로벌 배열을 통해 접근할 수 있습니다. 설정한 쿠키는 다음 페이지 로드 시부터 사용할 수 있습니다.


<?php
if(!isset($_COOKIE["user"])) {
    echo "쿠키 'user'가 설정되지 않았습니다!";
} else {
    echo "쿠키 'user'의 값은: " . $_COOKIE["user"];
}
?>


쿠키 삭제하기
쿠키를 삭제하려면 만료 시간을 과거로 설정하면 됩니다.


<?php
// 쿠키 삭제
setcookie("user", "", time() - 3600, "/");
?>


세션(Session)
세션은 서버에 저장되며, 각 클라이언트에게는 세션 ID가 쿠키를 통해 할당됩니다. 이 ID를 통해 서버는 클라이언트를 식별할 수 있습니다. 세션은 사용자가 로그아웃하거나 일정 시간 동안 활동이 없을 때 만료될 수 있습니다.

세션 시작하기
세션을 사용하기 위해서는 먼저 session_start() 함수를 호출하여 세션을 시작해야 합니다. 이 함수는 세션 변수를 등록하거나 현재 세션을 재개하는 데 사용됩니다.


<?php
// 세션 시작
session_start();
?>


세션 변수 설정하기
세션을 시작한 후에는 $_SESSION 슈퍼글로벌 배열을 통해 세션 변수를 설정할 수 있습니다.


<?php
// 세션 변수 설정
$_SESSION["favcolor"] = "green";
$_SESSION["favanimal"] = "cat";
?>


세션 변수 접근하기
세션 변수는 페이지가 변경되어도 지속되며, $_SESSION 배열을 통해 언제든지 접근할 수 있습니다.


<?php
// 세션 변수 접근
echo "당신의 좋아하는 색은 " . $_SESSION["favcolor"] . "입니다.";
echo "당신의 좋아하는 동물은 " . $_SESSION["favanimal"] . "입니다.";
?>


세션 종료하기
사용자가 로그아웃하거나 세션을 명시적으로 종료하려면 session_destroy() 함수를 사용합니다. 이 함수는 모든 세션 데이터를 제거합니다.

<?php
// 세션 종료
session_start(); // 세션 시작
// 세션 변수 모두 제거
session_unset();
// 세션 파괴
session_destroy();
?>



PHP에서 쿠키와 세션을 사용하는 방법은 비교적 간단합니다. 쿠키는 클라이언트 측에 데이터를 저장하는 반면, 세션은 서버 측에 데이터를 저장하여 더 안전한 방법을 제공합니다. 사용자의 선호도 저장, 로그인 상태 유지 등 다양한 기능을 구현할 때 이 두 기술을 적절히 활용할 수 있습니다.