Published on Hanbit Network (http://network.hanb.co.kr)

--------------------------------------------------------------------------------


PHP: 세션 추적- 1부


By W. J. 길모머(W. J. Gilmore), 역 한빛 리포터 1기 이상훈
요즘 들어 각광 받고 있는 e-CRM이니, personalization이니 하는 말들은 들었지만, 실제 적용분야에서는 어떤
식으로 쓰일까 궁금하던 참에 웹사이트 방문자의 세션을 추적하는 기능을 소개한 기사를 만나게 되어 반가운 마음으로 번역해 보았다.


--------------------------------------------------------------------------------


웹사이트에 대한 방문자 정보를 수집, 분석, 처리하는 일은 웹이라는 새로운 매체를 보는 가장 매력적인 관점 중 하나이다.
이러한 정보로 제품과 서비스에 관심이 있는 방문자의 패턴을 분석할 수 있을 뿐만 아니라, 개개의 방문자에 맞춘 서비스를 제공할
수 있다는 여러 장점이 있다. 예를 들어, 자신의 특정 페이지가 프랑스어 사용자들에게 가장 있기가 있다는 것을 알게 되며,
자동적으로 이러한 사용자를 인식해서 프랑스어로 된 환영 메시지를 제공할 수도 있는 것이다. 이러한 형태의 맞춤 서비스는 큰
인기를 얻고 있다. weather.com의 경우에는
방문자가 보고 싶어 하는 것만을 볼 수 있게 한다. 이것은 매우 환영할 만한 점이다. 필자는 날씨에 매우 관심이 있어 사이트의
여러 곳을 뒤지면서 시간을 낭비하지 않고 보고 싶은 모든 것을 단 하나의 화면에서 볼 수 있는 이 사이트에 자주 들린다. 또한
사이트를 돌아볼 때 내 성향에 따라 각각의 페이지에 대한 맞춤서비스를 제공하므로, 내가 특별히 선택하지 않은 영역에 대한 자료도
다음 방문 때 제공받기도 한다. 이 글에서는 PHP의 세션 추적(session-tracking) 기능을 이용하여 각자의 맞춤
웹사이트를 어떻게 만드는가를 설명한다. PHP의 세션 추적 기능은 사용하기 쉽고 맞춤형 웹 애플리케이션 개발에 매우 유용하다.
기능 구현에 들어가기 전에 몇 가지 기본적인 개념부터 짚고 가자. 설정PHP 4.0버전에 처음 도입된 세션 추적 기능은 PHP의
고유한 기능으로서 PHP 배포판 외의 부가적인 패키지가 필요 없다. 필자는 윈도우와 비(非)윈도우 서버에서 광범위한 세션을
사용했는데, 호환성에 관해선 아무 문제 없었다. 그러나 이 훌륭한 기능을 사용하기로 결정했다면 몇 가지 설정에 관한 쟁점을
기억해야 한다. 이 글에서는 이러한 쟁점들에 대해 설명하고, 후반부에서 유용한 다른 쟁점들을 설명하도록 하겠다. PHP의 세션
관리 기능 설정은 "Session"이라는 적절한 제목으로 php.ini 파일에 자리잡고 있다. 현재 19가지의 설정 항목이
있는데, 그 중 몇 가지는 아주 중요하다. 여기에서는 이에 대해 설명할 것이다.


session.save_handler (files | mm | user)


PHP는 일반 파일(files), 공유메모리(mm), 사용자 정의 함수(user)라는 세 가지 세션 정보를 저장하고
검색하는 기능을 지원한다. 이 중에서 파일에 저장하는 방법이 흔히 쓰이는데, 이 방법이 기본값으로 정의 되어 있기 때문이다.
파일을 이용하는 경우는 충분한 기능을 지원하지만, 세션 저장 파일은 아주 빨리 커지고, 실제로 사이트를 방문하는 사람에 비례해서
더욱더 빨리 커질 수도 있다는 점을 명심해야 한다. 공유메모리를 사용하면 가장 빨리 저장할 수 있지만, 쉽게 지워질 수 있기
때문에 일시적이다. 사용자 정의 함수를 사용하는 것은 가장 유연한 방법이지만 가장 어렵기도 하다. 이 방법은 세션 정보를
PHP가 지원하는 오라클이나 MySQL 같은 데이터베이스에 저장할 수 있도록 맞춤형 저장, 검색 관리자를 만든다. 이러한 방법을
사용할 때는 각각의 경우에 맞게 파일, 공유메모리, 사용자 함수와 같은 session.save_handler를 적절하게 설정해야
한다. 이 글에서는 기본 설정인 파일을 쓰는 방법으로 설명해 나갈 것이다.


session.save_path (path/to/directory)


이 지시자는 파일을 저장할 위치를 명시해 주므로, session.save_handler를 파일로 설정했을 때만 유효하다.
이 파일은 브라우저를 통해서 볼 수 없도록 document root 외의 다른 곳으로 지정하는 것이 좋다. 덧붙여서 이
디렉토리는 PHP를 동작하는 유저가 쓸 수 있도록 권한 설정을 해야 한다.

session.auto_start (0 | 1)


이 지시자는 세션 관리를 자동으로 시작할 것인지를 결정한다. 사이트의 모든 섹션에 세션을 쓸 일은 거의 없으므로 기본값은
0이다. 그러나 이 값을 1로 설정하면 자동으로 세션을 지원한다. 일반적으로는 PHP의 세션 관리 전략과 기능에 대해 학습할
필요 없이, 19개의 설정 지시자 중 위 세 가지만으로도 충분히 구현할 수 있다. 세션 전파기본적으로 세션은 방문자가 웹사이트를
탐색하는 시간대로 정의할 수 있다. PHP는 각 방문자의 세션을 각 방문자에 고유 세션 확인(SID)번호를 할당해서 행적을
추적한다. SID는 다양한 방법으로 만들 수 있지만, PHP는 기본적으로
fc94ad8b1ee49ef79c713ee98ac1fcc4와 같이 SID를 만든다. SID를 이용해서 사용자를 추적하는 방법에는
다음의 두 가지가 있다


쿠키의 연속된 검색과 저장

SID변수를 포함한 URL의 재기록


쿠키 사용 물론, 쿠키는 사용자의 세션간 지속상태를 파악하는 가장 쉬운 방법이라서 사용자를 추적하는 데 자주 사용된다.
그러나 사용자가 쿠키를 지원하지 않도록 브라우저를 설정할 수도 있고, 쿠키를 지원하지 않는 브라우저를 사용할 수도 있다는 점을
알아 두어야 한다. 세션과 쿠키를 사용하고자 할 때 반드시 살펴 보아야 할 php.ini의 설정 지시자가 몇 가지 있는데,
각각에 대해 살펴 보자.

session.use_cookies (0 | 1)


SID를 저장할 때 쿠키를 쓸 것인가를 지정한다. 0은 쿠키를 쓰지 않는 것이고, 1은 쿠키를 사용하도록 한다.


session.name (Default: PHPSESSID)


SID에 저장될 쿠키의 이름을 지정한다. 기본값은 PHPSESSID이다.


session.cookie_lifetime (Default: 0)


쿠키가 처음 생성되고 얼마동안 유효할 것인가를 초단위로 지정한다. 기본값은 0인데, 세션이 끝날 때 쿠키 값은 없어진다.


session.cookie_path (Default: /)


쿠키가 유효한 도메인 경로를 지정한다. 기본값은 / 이다.


session.cookie_domain (Default: null)


쿠키가 유효한 도메인을 지정한다. 기본값은 null이며, 위의 경우에는 공백으로 나타난다.
sesion.use_cookies가 활성화되었을 때는 set_cookie() 같은 cookie-setting 함수를 호출하지
않아도 된다. PHP의 세션 관리 기능이 자동으로 이를 처리하기 때문이다. URL 재기록URL을 SID에 기록하는 것은 쿠키를
사용하는 것에 비해 조금 불편해 보이지만, 항상 쿠키를 사용할 수는 없으므로 더 안전한 방법이기도 하다. SID는 URL에 수동
혹은 자동으로 첨부될 수 있다. 수동으로 SID를 첨부하려면 다음과 같이 SID의 URL안에 SID 전체 참조(global
reference)를 추가하면 된다.


<a href="configure.php?<?=SID?>">Go to the configuration page</a>


믈론, 일일이 SID를 추가하면 불편하므로 -enable-trans-id 옵션을 주어 PHP를 컴파일하면, 자동적으로
URL에 SID가 첨부된다. 컴파일 옵션을 제대로 주었다면 ?는 자동적으로 URL에 추가될 것이다. 이제 세션 추적을 시작해
보자! 이제 여러분은 사용자 세션을 만들고 싶을 것이다. 지금부터는 여러분만의 세션 지향 애플리케이션을 제작하는 데 기초를
제공할 몇 가지 예를 소개할 것이다. 리스트리스트 1에서는 SID가 어떻게 생성되고 세션 변수들이 다음 사용을 위해 어떻게
저장되는가를 보여 준다. 사용자가 직접 배경색을 고를 수 있도록 한다고 생각해 보자. 그에 따라 배경색 정보가 저장되고 이
정보는 사이트의 다른 페이지에서 사용될 것이다. 여기에서는 간단한 리스트를 만들기 위해서 $bgcolor 변수에
"#8080ff"를 직접 입력했으며, 사용자의 브라우저가 쿠키를 지원하도록 설정되어 있다고 가정한다. 리스트 1: 세션을 새로
만들고 세션 변수를 저장하는 스크립트


<?// create a new sessionsession_start();// register a session-variablesession_register("bgcolor");// Assign a value to the session-variable$bgcolor = "#8080ff";?><html><head><title>Session Example #1</title></head><body bgcolor="<?=$bgcolor?>" text="#000000" link="#000000" vlink="#000000" alink="#000000">Welcome to a session-enabled page! The background color on the next page will be set to a stylish blue.<p><a href = "1-2.php">Go to another session-enabled page</a>.</body></html>


리스트 1의 링크를 클릭하면 다음과 같은 리스트 2가 나타난다. 리스트 2는 쿠키를 설정한 후, 그로부터 SID를 가져올
수 있음을 보여준다. 또한 이 스크립트는 세션 변수인 $bgcolor를 가져와서 색상코드와 그에 따른 배경색도 보여준다. 리스트
2: 세션 변수를 전달하는 리스트 스크립트


<?// Resume session created in Listing 1-2session_start();?><html><head><title>Session Example #1</title></head><body bgcolor="<?=$bgcolor?>" text="#000000" link="#808040" vlink="#606060" alink="#808000"><?// Retrieve SID from cookie.print "Your SID is $PHPSESSID <br>";// Display the value of the $bgcolor variable.print "The persistent background color is: $bgcolor.";?></body></html>


session.cookie_lifetime을 3600초로 설정했다면, 사용자가 주어진 세션 시간 동안 페이지를 방문한
횟수와 상관없이 배경색과 SID는 처음 리스트 1에 접근했을 때부터 1시간 동안 유지된다. 세션 변수 삭제세션 변수를 삭제해야
할 때가 있다. 이것은 session_unregister() 함수를 쓰면 간단히 구현할 수 있다. 예를 들어, 사용자가 리스트
1에서와 같이 #8080ff로 자동적으로 설정되는 배경색을 거부하고 기본 배경색인 하얀 바탕을 표시한다고 가정하자. 리스트 2를
다시 작성해서 이 기능이 작동하는가를 보자. 리스트 3: 세션 변수를 확인하고 삭제하기


<?session_start();?><html><head><title>Session Example #1</title></head><?if ($seenform == "y") : if ($deletecolor == "y") : session_unregister("bgcolor"); endif;endif;if (! session_is_registered("bgcolor")) : session_register("bgcolor"); $bgcolor="white";endif;?><body bgcolor="<?=$bgcolor?>" text="#000000" link="#808040" vlink="#606060" alink="#808000"><?print "Your SID is $PHPSESSID <br>";print "The persistent background color is: $bgcolor <br>";if (! $seenform) : $form = <<<Form <form action="1-3.php" method="post"> <input type="hidden" name="seenform" value="y"> Do you like this background color?<br> <input type="radio" name="deletecolor" value="y">No<br> <input type="radio" name="deletecolor" value="n">Yes<br> <input type="submit" value="Submit"> </form> Form; echo $form;endif;?></body></html>

이 간단한 리스트는 session_register() 함수로 세션 변수를 등록하고, session_unregister()
함수로 세션을 지우고, session_is_registered() 함수로 세션을 검증하는 작업의 역학관계를 보여준다. 쿠키에
세션 변수 저장하기 마지막으로 쿠키의 여러 가지 값을 어떻게 사용자의 PC에 저장하는가에 대해 살펴 보자. 어떤 브라우저는 특정
도메인에 대해 한번에 사용할 수 있는 쿠키 개수를 제한하기 때문에, 쿠키 이외의 다른 방법도 알아 둬야 한다. 모든 데이터를
인코딩한 다음 하나의 쿠키에 한 줄로 저장하는 방법이 있다. 놀라울 것도 없지만, 우리의 뛰어난 PHP 개발자들은 미리 그런
요구를 예측하고 session_endoce()라는 정확히 위의 기능을 구현한 함수를 만들어 두었다. 이 함수는 URL에
첨부하려는 변수명과 이에 대응하는 정보를 담은 단일 문자열을 반환한다. 다음의 리스트 4를 살펴보자 리스트 4: 세션 데이터를
단일 문자열로 인코딩하기


<?session_start();session_register("bgcolor");session_register("name");session_register("email");$bgcolor = "#8080ff";$name = "Daffy Duck";$email = "daffy@duck.com";$encoded_string = session_encode();print "The encoded string is: $encoded_string";?>


리스트 4를 실행하면 다음과 같은 결과가 나타난다.


The encoded string is:bgcolor|s:7:"#8080ff";name|s:10:"Daffy Duck";email|s:14:"daffy@duck.com";
이것은 하나의 쿠키에 직접 문자열을 저장할 수 있어 매우
편리하다. 한 가지 반드시 고려할 점은 전체 쿠키 사이즈인데, 대부분의 브라우저가 제공하는 쿠키 사이즈의 최대값은 5kb
정도이다. 사용자가 우연히 데이터를 지우는 경우에 대비해서 이 문자열은 데이터베이스에 저장하고 사용자의 PC에는 세션 ID만을
갖는 쿠키를 저장하거나, SID를 쿠키에 저장하고 인코딩된 문자열을 데이터베이스에 저장할 수도 있다. 사용자의 브라우저에 저장될
데이터는 그 중요성과 관련된 보안만 고려하면 된다. 또 다른 대안은 암호화된 문자열을 쿠키에 저장하고 검색할 때 암호를 해독하는
방법도 있다. 이러한 데이터를 가지고 무엇을 할 것인가와 상관없이, session_decode() 함수를 이용하면 세션 변수를
자동적으로 해독해서 복구할 수 있다. $encoded_string을 나중에 디코드하는 경우를 생각해보자


<?session_decode($encoded_string);?>


이 함수는 각각의 이름/값 쌍으로 디코딩할 뿐만 아니라 각각의 세션 변수를 만든다. 다음 기사 소개이번 기사에서는 PHP의
고유한 세션 추적 기능을 소개했다. 일반적인 설정, (쿠키와 URL 재기록을 대비한) 사용전략과 PHP의 세션 함수들에 대한
자세한 설명도 곁들였다. 이러한 유용한 기능을 설명하기 위해서 특정한 경우, 어떻게 세션을 사용하는가에 대한 몇 가지 예도
제공했다. 세션 추적: 2부에서는 이러한 세션 관리의 소개를 확장해서 PHP의
session_set_save_handler()함수를 이용한 커스텀 세션 저장 함수를 사용하는 것을 중점으로 설명할 것이다.
세션 저장 함수는 세션 정보를 데이터베이스와 같은 특별한 저장 검색 매체를 쓰고자 할 때 특히 유용하다. 이 멋진 기능을
보여주기 위해, 일반 함수로 어떻게 MySQL 데이터베이스의 세션 저장 스키마와 연동할 수 있는지 보여 줄 것이다.

--------------------------------------------------------------------------------


W. J. 길모어(W.J. Gilmore)는
1997년부터 PHP 애플리케이션을 개발하고 있으며, 가장 있기 있는 웹 개발 사이트에 글을 게재하고 있다. 2001년 1월에
출판된 'A Programmer's Introduction to PHP 4.0'이라는 책을 저작한 바 있으며, Apress의 웹과 오픈 소스 기술의 부편집장을 맡고 있다. 이상훈님은 한빛 리포터 1기로 활동 중이며, IDE Korea라는 컨설팅 + 개발 업체에서 인터넷 개발 쪽을 맡고 있습니다.


--------------------------------------------------------------------------------

Copyright © 2007 Hanbit Media, Inc.


Published on Hanbit Network (http://network.hanb.co.kr)


PHP: 세션 추적- 2부


By W. J. 길모머(W. J. Gilmore), 역 한빛 리포터 1기 이상훈
지난 기사에서 세션 추적으로 웹사이트에 완전히 새로운 영역을 추가할 수 있음을 알 수 있었다. 이번 주에는 우리가 배운 것을
토대로 어떻게 사용자 세션 데이터를 저장하는 커스텀 함수를 만드는가를 보여주고자 한다. 이 함수들이 어떻게 만들어지는지 보기
전에 먼저 왜 이러한 작업을 하고자 하는지 자문하는 기회를 가져보자. 왜 PHP가 기본적으로 제공하는 파일 사용 방식 대신에
커스텀 함수를 만들어야 하는 것일까? 이는 세션 데이터를 저장하는 데 데이터베이스를 활용하기 위해서이다. 데이터베이스에 적재된
세션 데이터는 효율적일 뿐만 아니라, 세션 정보를 다른 도메인이나 네트워크를 통해서도 쉽게 검색할 수 있어서 유용하다. 설정지난
기사 내용을 기억해보면 각 세션 확인(SID) 번호에 따라 각 파일에 기본적으로 세션 정보가 기록된다. 또한 세션 정보는
공유메모리와 커스텀 저장 함수를 생성함으로써 기록될 수도 있다. 이 글에서는 커스텀 저장 함수를 이용한 설정에 대해서 설명할
것이다. php.ini파일을 열어서 다음 지시자를 찾는 것부터 시작한다.


session.save_handler = files ; handler used to store/retrieve data

이 글의 후반부에서 생성할 커스텀 저장함수를 이용하기 위해서는 session.save_handle를 다음과 같이 설정해야 한다.


session.save_handler = user ; handler used to store/retrieve data
이는 PHP 엔진에 사용자 고유의 저장 함수를 정의할 것임을 의미한다. 정확히 어떻게 구현될
것인가는 곧 보게 될 것이다. 함수 어떤 저장 매체를 사용하든지 간에, 6가지 함수를 정의해야 한다. 이 함수는 php 엔진에서
세션 관리 기능을 수행하는 데 필요한 작업을 수행한다. 여기에서는 각 함수의 목적과 변수를 정의하도록 하겠다.


session_open($session_save_path, $session_name)
session_open() 함수는 세션 관리 과정에서 사용하는 요소를 초기화하는 간단한 함수다. 두
개의 입력 변수 $session_save_path와 $session_name은 php.ini에서 볼 수 있는 설정 지시자를
가리킨다. 뒤에 나올 리스트에서 이 설정 값을 가져오는 get_cfg_var() 함수를 사용할 것이다.



session_close()
session_close() 함수는 전형적인 관리자 함수와 마찬가지로, session_open()으로 초기화된 사용중인 자원을
닫는다. 보는 바와 같이 이 함수에 대한 입력 변수는 없다. 이 함수는 세션을 없애는 것은 아니라는 점을 기억하자. 세션을
없애는 것은 이 장의 나중에 소개할 session_destory() 함수의 몫이다.



session_read($sessionID)
이 함수는 저장 매체에서 세션 데이터를 읽어 온다. 입력 값인 $sessionID는 특정 클라이언트에 대한 저장된 데이터를 구분하는 세션 ID를 가리킨다.


session_write($sessionID, $value)

이 함수는 저장 매체에 세션 데이터를 기록한다. 입력 값인 $sessionID은 변수명이고 $value는 세션 데이터를 의미한다.


session_destroy($SID)


이 함수는 스크립트에서 가장 나중에 불러 오는 함수로, 세션과 관련된 모든 변수를 없앤다. 입력 값인 $SID는 현재 열려 있는 세션의 세션 ID를 가리킨다.



session_garbage_collect($lifetime)

이 함수는 만료된 모든 세션을 효과적으로 삭제한다. 입력 값인 $lifetime은 php.ini에
있는 session.gc_maxlifetime 세션 설정 지시자를 가리킨다. 일단 함수가 정의되면 PHP 세션 관리 로직과
연결한다. 이 작업은 PHP의 이미 정의된 session_set_save_handler() 함수에 이들 이름을 전달함으로써
수행된다. 예를 들어, 커스텀 함수 이름을 위에 나온 것으로 가정하면 다음과 같은 커스텀 관리자를 정의할 수 있다.



session_set_save_handler("session_open", "session_close", 

"session_read", "session_write",
"session_destroy", "session_garbage_collect");

함수명은 사용자가 마음대로 지정할 수 있다. 여기에서 중요한 것은 다음과 같다.
  • 이 함수는 정확한 숫자와 변수의 형식을 입력으로 전달한다.
  • session_set_save_handeler() 함수에 함수명이 열기, 닫기, 읽기, 쓰기, 없애기, 그리고 가비지 컬렉션이라는 정확한 순서로 정의되어 있다.

MySQL 세션 저장 기능 지금까지 PHP의 사용자 정의 세션 기능에서 지시한 요구사항을 정의했다. 이 정보는 세션 데이터를 다루고자 하는 매체에 적용될 수 있다. 이 장에서는 각광 받고 있는 MySQL
데이터베이스 서버로 이러한 작업을 수행하는 것을 보여줄 것이다. 함수를 작성하기에 앞서 데이터베이스 테이블을 만들어야 한다.
리스트 1에 필자가 만든 테이블이 있다. 세션 테이블의 활용 정도에 따라 데이터베이스를 좀더 명확하게 만들고 싶을 수도
있겠지만, 자세한 것은 사용자의 몫이다. 리스트1: MySQL 세션 저장 테이블



mysql>CREATE TABLE SessionsTable (

->SID char(32) NOT NULL,
->expiration INT NOT NULL,
->value TEXT NOT NULL,
->PRIMARY KEY(SID) );



리스트 2는 MysQL 관리 함수를 보여준다. 앞장에서 소개한 것과 같은 순서로 이들 함수를 정의했다. 함수의 문법과 그에 대한 주석은 여러분 각자가 공부하길 바란다.


리스트 2: MySQL 세션 저장 라이브러리




(<code>mysql_sessions.inc</code>)</p>


<?

// Session Table

$sess_table = "SessionsTable";

// Retrieve the session maximum lifetime (found in php.ini)

$lifetime = get_cfg_var("session.gc_maxlifetime");

//=============
// function: mysql_session_open()
// purpose: 서버와 지속적인 연결을 만들고 데이터베이스를 선택한다.
//=============

mysql_session_open($session_path, $session_name) {

mysql_pconnect("localhost", "myusername", "mysecretpassword")
or die("Can't connect to MySQL server! ");

mysql_select_db("sessions_database")
or die("Can't select MySQL sessions database");

} // end mysql_session_open()

//=============
// function: mysql_session_close()
// purpose: 서버 연결이 지속적이기 때문에 실제로 아무 일도 하지 않는다.
// 이 특별한 처리에서는 아무 일도 하지 않지만, 정의하기로 한다.
//=============

mysql_session_close() {

return 1;

} // end mysql_session_close()

//=============
// function: mysql_session_select()
// purpose: 데이터베이스에서 세션 정보를 읽어 온다.
//=============

mysql_session_select($SID) {

GLOBAL $sess_db;
GLOBAL $sess_table;

$query = "SELECT value FROM $sess_table
WHERE SID = '$SID' AND
expiration > ". time();

$result = mysql_query($query);

} // end mysql_session_select()

//=============
// function: mysql_session_write()
// purpose: 이 함수는 세션 데이터를 기록한다. SID가 이미 있으면, 데이터를 갱신한다.
//=============

mysql_session_write($SID, $value) {

GLOBAL $sess_db;
GLOBAL $sess_table;
GLOBAL $lifetime;

$expiration = time() + $lifetime;

$query = "INSERT INTO $sess_table
VALUES('$SID', '$expiration', '$value')";

$result = mysql_query($query, $sess_db);

if (! $result) :

$query = "UPDATE $sess_table SET
expiration = '$expiration',
value = '$value' WHERE
SID = '$SID' AND expiration >". time();

$result = mysql_query($query, $sess_db);

endif;

} // end mysql_session_write()

//=============
// function: mysql_session_destroy()
// purpose: 입력 받은 SID에 대한 한 줄의 세션 정보를 삭제한다.
//=============

mysql_session_destroy($sessionID) {

GLOBAL $sess_table;

$query = "DELETE FROM $sess_table
WHERE SID = '$sessionID'";
$result = mysql_query($query);

} // end mysql_session_destroy()

//=============
// function: mysql_session_garbage_collect()
// purpose: 만료된 모든 세션을 삭제한다.
//=============

mysql_session_garbage_collect($lifetime) {

GLOBAL $sess_table;

$query = "DELETE FROM $sess_table
WHERE sess_expiration < ".time() - $lifetime;
$result = mysql_query($query);

return mysql_affected_rows($result);

} // end mysql_session_garbage_collect()

?>



일단 이들 함수를 정의했으면 다른 스크립트의 라이브러리를 포함하고 MySQL 함수와 PHP의 세션 관리 기능을 연결해 주는 session_set_save_handler() 함수를 호출할 수 있다. 리스트 3은 이 함수가 어떻게 MySQL 함수와 결합해서 사용되는가를 보여준다.


리스트 3: session_set_save_handler()로 MySQL 함수 결합





<?

INCLUDE("mysql_sessions.inc");

session_set_save_handler("mysql_session_open", "mysql_session_close",
"mysql_session_select", "mysql_session_write",
"mysql_session_destroy",
"mysql_session_garbage_collect");

session_start();

// 여기부터는 지난 기사와 마찬가지로 세션을 사용할 수 있다.

?>
결론이것으로 이번 주의 기사를 마감하고 세션 추적의 2회에 걸친 연재를 결론지을까 한다. 세션
추적- 1부에서는 사용자를 투명하게 추적하는 것을 가능하게 해줌으로써, 세션이 어떻게 인터넷 응용에 무한한 부가가치를
제공하는가를 보여주었다. 이번 기사에서는 1부에서 습득한 것을 바탕으로 자신만의 세션 인터페이스를 쉽게 제작하고, PHP가
지원하는 모든 매체로 데이터를 관리할 수 있다는 것을 보여 주었다.

W. J. 길모어(W.J. Gilmore)는 1997년부터 PHP
애플리케이션을 개발하고 있으며 가장 있기 있는 웹 개발 사이트에 글을 게재하고 있다. 2001년 1월에 출판된 'A
Programmer's Introduction to PHP 4.0'이라는 책을 저작한 바 있으며, Apress의 웹과 오픈 소스
기술의 부편집장을 맡고 있다. 이상훈님은 한빛 리포터 1기로 활동 중이며, IDE Korea라는 컨설팅 + 개발 업체에서 인터넷 개발 쪽을 맡고 있습니다.



Copyright © 2007 Hanbit Media, Inc.
이 게시물을..