본문 바로가기
PHP

PHP cookie & session

by FraisGout 2020. 7. 2.

쿠키(cookie)?

쿠키(cookie)란 웹 사이트에 접속할 때 서버에 의해 사용자의 컴퓨터에 저장되는 정보를 의미합니다.

 

 

 

웹 사이트는 이렇게 저장된 사용자의 정보를 클라이언트(client) 측의 컴퓨터에 남겨서 필요할 때마다 재사용합니다.

 

사용자의 컴퓨터에 마치 과자 부스러기가 남아 있는 것과 같다고 해서 '쿠키(cookie)'라는 명칭이 붙었습니다.

 

 

 

현재 이러한 쿠키는 로그인 정보나 장바구니 정보를 저장하는 용도로 많이 활용되고 있습니다.

 

하지만 사용자의 정보가 컴퓨터에 고스란히 남기 때문에 사생활 침해의 우려가 있으며, 보안과 관련된 이슈를 가지고 있습니다.

 

쿠키 생성

PHP에서는 setcookie() 함수를 이용하여 쿠키를 생성할 수 있습니다.

 

문법

setcookie ( $name [, $value [, $expire [, $path [, $domain [, $secure [, $httponly ]]]]]] )

 

 

 

setcookie() 함수의 매개변수 중에서 쿠키 명을 제외한 매개변수는 모두 옵션입니다.

 

쿠키는 명시된 지속 시간이 지나면 무효가 되며, 지속 시간을 전달하지 않으면 브라우저가 닫히기 전까지 계속 유효합니다.

 

또한, 사용자가 직접 삭제하지 않는 한 브라우저에 계속 남아 있을 것입니다.

 

 

 

쿠키를 생성할 때 유효한 주소와 경로를 매개변수로 전달할 수 있습니다.

 

만약 HTTPS 프로토콜에서 사용하려면 secure 값을 true로 설정해야 합니다.

 

또한, HTTP 프로토콜에서만 사용하도록 하려면 httponly 값을 true로 설정하면 됩니다.

 

 

 

이렇게 생성된 쿠키는 $_COOKIE["쿠키이름"]을 통해 접근할 수 있습니다.

 

)

<?php

 

$cookieName = "city";

 

$cookieValue = "서울";

 

setcookie($cookieName, $cookieValue, time()+60, "/"); // 쿠키가 60초 간 지속됨.

 

?>

 

...

 

<?php

 

if(!isset($_COOKIE[$cookieName])) { // 해당 쿠키가 존재하지 않을 때

 

echo "{$cookieName}라는 이름의 쿠키는 아직 생성되지 않았습니다.";

 

} else { // 해당 쿠키가 존재할 때

 

echo "{$cookieName}라는 이름의 쿠키가 생성되었으며, 생성된 값은 '".$_COOKIE[$cookieName]."'입니다.";

 

}

 

?>

setcookie() 함수가 포함된 PHP 스크립트 코드는 <html>태그보다 앞서 위치해야 합니다.

 

쿠키 삭제

PHP에서 unset() 함수나 setcookie() 함수를 사용하면, 생성된 쿠키를 삭제할 수 있습니다.

 

)

<?php

 

$cookieName = "city";

 

$cookieValue = "서울";

 

setcookie($cookieName, $cookieValue, time()-60, "/"); // 쿠키를 삭제함. unset($_COOKIE["city"])와 같음.

 

?>

 

...

 

<?php

 

echo "{$cookieName}라는 이름의 쿠키가 삭제되었습니다.";

 

?>

isset() 함수는 전달받은 변수가 설정되어 있고, 그 값이 null이 아닌지를 검사합니다.

 

세션(session)이란?

세션(session)이란 웹 사이트의 여러 페이지에 걸쳐 사용되는 사용자 정보를 저장하는 방법을 의미합니다.

 

사용자가 브라우저를 닫아 서버와의 연결을 끝내는 시점까지를 세션이라고 합니다.

 

 

 

앞서 살펴본 쿠키는 클라이언트 측의 컴퓨터에 모든 데이터를 저장합니다.

 

하지만 세션은 서비스가 돌아가는 서버 측에 데이터를 저장하고, 세션의 키값만을 클라이언트 측에 남겨둡니다.

 

브라우저는 필요할 때마다 이 키값을 이용하여 서버에 저장된 데이터를 사용하게 됩니다.

 

 

 

이러한 세션은 보안에 취약한 쿠키를 보완해주는 역할을 하고 있습니다.

 

세션 시작

PHP에서는 session_start() 함수를 이용하여 새로운 세션을 시작하거나, 기존의 세션을 다시 시작할 수 있습니다.

 

 

 

session_start() 함수는 세션 아이디가 이미 존재하는지를 확인하고, 존재하지 않으면 새로운 아이디를 만듭니다.

 

만약 이미 존재하는 세션 아이디가 있을 때는 원래 있던 세션 변수를 다시 불러와서 사용할 수 있도록 합니다.

 

 

 

세션 아이디는 웹 서버에 의해 무작위로 만들어진 숫자입니다.

 

이 세션 아이디는 세션이 유지되는 동안 클라이언트 측에 저장되며, 세션 변수를 등록하는 키로 사용됩니다.

 

웹 서버에서는 클라이언트로부터 받아온 세션 아이디를 가지고, 해당 아이디에 대응되는 세션 변수에 접근할 수 있습니다.

 

 

 

쿠키와 마찬가지로 세션도 어떤 헤더보다도 먼저 생성해야만 합니다.

 

)

session_start();

 

 

 

세션의 지속 시간은 쿠키와 달리 php.ini 파일에 설정되어 있으므로, 따로 명시해주지 않아도 됩니다.

 

세션 변수의 등록

세션이 생성되고 나면 세션 변수를 수퍼 글로벌인 $_SESSION 배열에 등록할 수 있습니다.

 

이때 세션 변수의 이름이 키값이 되며, 이 내용은 서버 측에 저장됩니다.

 

등록된 세션 변수는 등록을 해지하지 않는 한 세션이 끝날 때까지 유지됩니다.

 

)

$_SESSION["city"] = "부산"; // 세션 변수의 등록

 

$_SESSION["gu"] = "해운대구";

 

 

 

echo "세션 변수가 등록되었습니다!";

 

세션 변수에 접근하기

생성된 세션 변수는 $_SESSION["세션변수이름"]으로 접근할 수 있습니다.

 

)

echo "제가 살고 있는 도시는 {$_SESSION['city']}입니다.<br>";

 

echo "그 중에서도 {$_SESSION['gu']}에 살고 있습니다.<br>";

 

 

 

print_r($_SESSION); // 모든 세션 변수의 정보를 연관 배열 형태로 보여줌.

print_r() 함수는 인수로 전달받은 변수의 정보를 사람이 읽기 편한 형태로 표시해주는 함수입니다.

 

세션 변수의 등록 해지

세션 변수의 사용이 모두 끝나면, 세션 변수의 등록을 해지할 수 있습니다.

 

 

 

unset() 함수를 사용하면, 특정 이름의 세션 변수만을 해지할 수 있습니다.

 

현재 등록된 모든 세션 변수를 해지하고자 할 때에는 session_unset() 함수를 사용하면 됩니다.

 

 

 

또한, 세션을 자체를 완전히 종료하려면 session_destroy() 함수를 사용하여 세션 아이디를 삭제하면 됩니다.

 

)

// 특정 세션 변수의 등록 해지

 

/* if(!isset($_SESSION["city"])) {

 

echo "{$_SESSION['city']} 세션 변수가 삭제되었습니다.";

 

unset($_SESSION["city"]);

 

} else {

 

echo "해당 세션 변수가 등록되어 있지 않습니다.";

 

} */

 

 

 

session_unset(); // 모든 세션 변수의 등록 해지

 

session_destroy(); // 세션 아이디의 삭제

 

 

 

echo "모든 세션 변수가 등록 해지되었으며, 세션 아이디도 삭제되었습니다.";

위의 예제처럼 세션 변수도 isset() 함수를 사용하여, 그 값이 설정되어 있는지를 검사할 수 있습니다.

'PHP' 카테고리의 다른 글

PHP & MySQL  (0) 2020.07.02
PHP exception  (0) 2020.07.02
PHP file  (0) 2020.07.02
PHP Form  (0) 2020.07.02
PHP inheritance  (0) 2020.07.02

댓글