[PHP 고급] PHP 세션(Session)

 

PHP 에서 세션은, 한 사용자 세션에 대해, 정보를 저장하거나 혹은 설정을 변경하기 위해 사용됩니다.

세션 변수는 한 사용자에 대한 정보를 가지고 있으며, 하나의 애플리케이션에서 모든 웹페이지에

사용가능 합니다.

 


 

PHP 세션 변수(Session Variables)

여러분이 프로그램으로 무언가 작업을 하고 있다면, 일단 열고, 몇가지 변화를 준다음, 그걸 닫습니다.

이건 상당히 많은점에서 세션(Session)과 유사합니다.

컴퓨터는 여러분이 누구인지 알고있고, 여러분이 언제 프로그램을 시작하고 언제끝내는지를 압니다.

하지만, 인터넷에서는 한가지 문제점이 있습니다.

그건 바로 웹서버는 여러분이 누구이고, 여러분이 무얼 하는지 모른다는 겁니다.

바로 HTTP 주소가 상태를 유지하지 않기 때문입니다.

 

PHP 세션은 여러분이 나중에 어떤 용도(사용자이름, 쇼핑아이템 등등..)로 사용할 수 있도록 서버에 사용자 정보를 저장할 수 있도록

함으로서 이 문제를 해결합니다.

하지만, 세션 정보는 임시적이고 사용자가 웹사이트를 떠나면 삭제됩니다.

영구적인 저장소를 원한다면 데이터베이스에 정보를 저장해야 겠지요.

 

세션은 고유 ID (Unique ID, 줄여서 UID) 를 각 사이트 방문자마다 부여하고, 이 UID에 기반해서 값들을 저장합니다.

UID는 쿠키에 저장되거나, URL을 통해 전달되기도 합니다.

 


 

PHP 세션(Session) 시작하기

PHP 세션에서 사용자 정보를 저장할 수 있기전에, 우선 세션을 '시작' 해야만 합니다.

 

참고: session_start() 함수는 반드시 <html> 태그 이전에 나와야 합니다:

<?php session_start(); ?>
<html>
<body>
</body>
</html>

 

위의 코드는, 사용자의 세션을 서버에 등록하여 여러분이 사용자 정보를 저장할 수 있도록 해주고, 사용자의 세션에 UID를 할당합니다.


 

세션 변수(Session Variable) 저장하기

세션 변수에 값을 저장하고 얻는 올바른 방법은 PHP의 $_SESSION 변수를 쓰는 겁니다:

 

<?php
session_start();
// store session data
$_SESSION['views']=1;
?>
<html>
<body>
<?php
//retrieve session data
echo "Pageviews=". $_SESSION['views'];
?>
</body>
</html>

결과:

Pageviews=1

아래의 예제에서는, 단순한 페이지뷰 카운터를 만듭니다.

isset() 함수는 "views" 변수가 이미 설정되어 있는지 체크합니다.

만일 "views" 가 설정되어 있다면, 카운터를 증가시킬 것이고,

"views"가 존재하지 않는다면, "views" 변수를 만들고 1로 설정합니다:

 

<?php
session_start();
if(isset($_SESSION['views']))
$_SESSION['views']=$_SESSION['views']+1;
else
$_SESSION['views']=1;
echo "Views=". $_SESSION['views'];
?>

 


 

세션 삭제하기

세션 데이터를 지우고 싶다면, unset() 이나 session_destroy() 함수를 사용하시면 됩니다.

unset() 함수는 지정된 세션 변수를 해제하는데 사용됩니다:

 

<?php
unset($_SESSION['views']); ?>

 

session_destroy() 함수를 불러와서 세션을 완전히 파기할수도 있습니다:

<?php
session_destroy(); ?>

참고: session_destroy() 함수는 세션을 완전히 초기화 시킬거고, 저장된 세션 데이터는 몽땅 날아갈겁니다.

최종 수정일:
서지스윈

서지스윈

IT와 기술을 이해하고, 유용한 소프트웨어를 발견하도록 돕고 싶습니다. 윈도우(Windows), 맥(macOS), 리눅스(Linux), 스마트폰 앱, 웹 서비스, 기획 시리즈물까지. 더 많은 것을 발견하고, 더 많은 것을 해보세요.