자바스크립트와 마찬가지로 클라이언트뿐 아니라 서버측에서 쿠키 설정이 가능합니다. php에서 쿠키를 설정 및 사용하는 방법에 대하여 알아볼려합니다.


# PHP에서 쿠키(cookie) 사용하는 방법먼저 아래는 쿠키를 설정하기 위해 필요한 설정 및 사용방법입니다. 참고로 클라이언트측과 서버측 모두 쿠키를 설정할 수 있지만 설정값 모두 저장되는 곳은 클라이언트의 브라우저입니다. 서로 다른 값들이 저장되는 것이 아니라는 점 알아두세요.)

setcookie (쿠키명, 쿠키값, 만료시간, 경로, 도메인, 보안, httponly);


이때 설정 가능한 옵션값들을 자세히 알아보면 아래와 같습니다.

-----
  • 쿠키명(필수) : 설정 될 쿠키 이름을 결정함
  • 쿠키값(선택) : 쿠키 이름에 입력될 값
  • 만료시간(선택) : Default 값은 0이며 쿠키가 유지될 시간을 설정
  • 경로(선택) : 경로를 지정할 경우 특정 위치와 하위 경로에서만 사용가능하도록 설정됨
  • 슬러쉬(/) : 슬러쉬 기호를 값으로 입력할 경우 전체 경로에서 사용됨을 의미
  • 도메인(선택) : 사용될 도메인을 지정가능함. 서브도메인 입력시 해당 서브도메인만 사용가능
  • 보안(선택) : 보안 프로토콜인 https에서만 사용가능하도록 설정함
  • httponly : HTTP에서만 사용가능하도록 하여(서버단 언어로만...) 스크립트에 의한 쿠키 접근을 허용안하게 함.
-----

위 값에서 만료시간은 초단위로 추가해주면됩니다. 예를 들어 현재시간에서 한시간 또는 하루 뒤에 쿠키값을 만료할 경우 만료시간에 아래와 같이 사용합니다. 아래에서 알아보세요.


! PHP 쿠키 설정시 시간에 대하여 처리하는 방법i. 한시간 : 60 * 60 = 3,600 이므로 아래와 같이 설정 가능합니다.
time() + 3600  //  한시간을 쿠키값으로 설정

ii. 하루 (24시간) : 60 * 60 * 24 = 86,400이므로 아래와 같이 설정 가능합니다.
time() + 86400 // 24시간, 하루를 쿠키값으로 설정



! 쿠키함수 setCookie() 예제보기

아래 예제는 쿠키함수에 실제 원하는 쿠키 시간을 설정한 예제입니다. 예제에서는 한 시간 그리고 한달 예제 코드입니다.
<?php
  setcookie('쿠키명', '쿠키값', time() + 3600);
  // 1시간 뒤에 만료될 쿠키값 설정하기

  setcookie('쿠키명', '쿠키값', time() + 86400 * 30);
  // 한달 뒤에 만료될 쿠키값 설정하기, 하루 86400 * 30(한달 30일 기준)
?>

그렇다면 쿠키값을 새롭게 업데이트하거나 읽어올 경우 어떻게 할까요? 이 경우 $_COOKIE['쿠키명']을 사용합니다. 그럼 아래 예제를 확인해보세요.

만약 testCookie라는 쿠키값이 설정된 경우 설정된 값을 확인하는 방법입니다.
<?php
  echo $_COOKIE['testCookie'];
  // 쿠키명 testCookie의 설정 값 출력하기
?>

이처럼 쿠키가 설정된 경우 이 값을 가져와 간단히 확인할 수 있습니다.


# 쿠키값 삭제 또는 만료하기

사용되는 쿠기값을 중단시키기 위해 삭제 및 만료하는 방법입니다. 똑같은 setcookie() 함수를 사용하되 해당 쿠키명의 시간에 마이너스값을 입력하거나 unset() 함수를 사용하여 쿠키를 삭제 및 중단 되도록 바꿉니다.

! 쿠키값 삭제 예제보기
아래는 testCookie라는 값을 삭제하는 예제코드입니다. 아래의 두 가지 방법 모두 동일하게 동작하여 쿠키값을 제거합니다.
<?php
  unset($_COOKIE["yourcookie"]);setcookie('testCookie', '', time() - 1);
  // 쿠키명 testCookie 사용불가, 만료됨
?>

참고로, 뒤에 설정한 -1보다 마이너스 값이 더 크면 삭제됩니다. -1000 역시 값을 삭제하는 건 동일합니다.


# 쿠키 설정 에러 setcookie() 정상동작 안하는 경우 만약 setcookie()로 설정하였으나 정상적으로 동작하지 않을 경우 확인할 사항은 아래 두 가지를 확인해보세요. 대체적으로 아래 이슈를 해결시 쿠키 사용이 가능합니다.

첫째, setcookie() 설정 이전에 HTTP 방식이 아닌 browser 상에서 출력이 있어는지 확인
다시 말해, echo문이나 다른 것을 통해 어떤식으로는 setcookie() 함수 이전에 화면에 출력이 있으면 안됩니다! 출력이 있는 경우 쿠키 사용이 불가능합니다.

두번째, setcookie()의 경로설정이 되어 있는지 확인
예를 들어 쿠키를 설정하는 위치가 '/a/b/'인 경우 '/a/' 경로에서는 쿠키 사용이 가능하지 않을 수 있습니다. 즉, 쿠키를 설정한 현재 페이지의 reference를 참고한다는 것입니다. 제 경우 setcookie() 뒤의 매게변수의 경로값에 '/'를 설정한 이후 정상동작하였습니다.

여기까지 php에서 쿠키를 사용하는 다양한 방법을 알아보았습니다.