세션핸들러 파일
세션핸들러는 PHP3와 PHP4에서 모두 변함없이 사용할 수 있으므로 PHP4로 업그레이드하더라도 이 부분은 수정할 필요가 없습니다. PHP3에서는 세션함수를 제공하지 않으므로 제가 공개한 세셔너를 포함시켜야 합니다. 저장매체에 따라 또는 PHP 버전에 따라 포함하여야 하는 파일이 차이가 나므로 아래를 참조하여 적절한 파일을 선택하기 바랍니다. 파일을 인클루드하는 부분을 제외한 나머지 부분은 저장매체 또는 PHP 버전에 관계없이 동일합니다.
PHP3 - 세셔너 핸들러(파일시스템)
[code php;gutter:false] <?php

require("./sessioner/lib.sessioner.php");
require("./sessioner/handler.sessfile.php");

session_handler();
session_start();

.
.
.

?> [/code]
PHP4 - 세셔너 핸들러(파일시스템)
[code php;gutter:false] <?php

require("./sessioner/handler.sessfile.php");

session_handler();
session_start();

.
.
.

?> [/code]
PHP3 - 세셔너 핸들러(데이터베이스)
[code php;gutter:false] <?php

require("./minidb/class.mysql.php");
require("./sessioner/lib.sessioner.php");
require("./sessioner/handler.sessbase.php");

$base = new baseDbsql("localhost", "xx", "xx", "xx");

session_handler();
session_start();

.
.
.

?> [/code]
PHP4 - 세셔너 핸들러(데이터베이스)
[code php;gutter:false] <?php

require("./minidb/class.mysql.php");
require("./sessioner/handler.sessbase.php");

$base = new baseDbsql("localhost", "xx", "xx", "xx");

session_handler();
session_start();

.
.
.

?> [/code]
PHP3 - 세셔너 핸들러(DBM)
[code php;gutter:false] <?php

require("./sessioner/lib.sessioner.php");
require("./sessioner/handler.sessdbm.php");

session_handler();
session_start();

.
.
.

?> [/code]
PHP4 - 세셔너 핸들러(DBA)
[code php;gutter:false] <?php

require("./sessioner/handler.sessdba.php");

session_handler();
session_start();

.
.
.

?> [/code]
PHP3 - 세셔너 핸들러(쿠키)
[code php;gutter:false] <?php

require("./sessioner/lib.sessioner.php");
require("./sessioner/handler.sesscook.php");

session_handler();
session_start();

.
. 세션데이터 관련하여 서버에서 처리할 내용
.

session_write();

.
. 세션데이터를 이용만 할 수 있는 부분
.

?> [/code]
PHP4 - 세셔너 핸들러(쿠키)
[code php;gutter:false] <?php

require("./sessioner/handler.sesscook.php");

session_handler();
session_start();

.
. 세션데이터 관련하여 서버에서 처리할 내용
.

session_write();

.
. 세션데이터를 이용만 할 수 있는 부분
.

?> [/code]
사용 예제(PHP3에서 데이터베이스용 세션핸들러를 사용할 경우)
[code php;gutter:false] <?php

/*
filename : sessbase.php3
email : hwooky@phpclass.com
homepage : www.phpclass.com
author : hwooky
environment :
PHP3
미니디비 0.2.1
세셔너 0.2.3
세션핸들러(디비용) 0.0.2
*/

require("./../../engine/class2/minidb/class.mysql.php");
require("./../../engine/class2/sessioner/lib.sessioner.php");
require("./../../engine/class2/sessioner/handler.sessbase.php");

$base = new baseDbsql("localhost", "xx", "xx", "xx");

session_event_path("./event");
session_handler();
session_start();

if ($init) {
session_unset();
session_destroy();
session_handler();
}

if (!$bank) {
session_register(array("bank", "bank2", "bank3"));
}

//
// 서버에서 처리해야 할 부분
//
$bank .= "#";
$bank2 += 10;
$bank3 .= "$";

session_write(); // 쿠키용의 경우에는 이곳에서 세션데이터를 쿠키로 저장하며,
// 파일용,디비용,DBM/DBA용의 경우에는 이 함수를 무시하며
// 웹문서 처리가 끝나는 시점에서 세션데이터를
// 해당저장매체에 저장

//
// 브라우저에 보낼 데이터를 생성하는 부분
//

echo "==============\n";
echo "Sesseiner Path : ".session_save_path()."\n";
echo "==============\n";
echo "이벤트핸들러 정보 :\n";
echo $event_test;
echo "==============\n";
echo "세션데이터 정보 :\n";
echo "\$bank = $bank\n\n";
echo "==============\n";
echo "타방문자 정보 :\n";
$list = session_guest_list();
if (is_array($list)) {
echo "타방문자수 : ".session_guests()."명\n";
while(list(,$id)=each($list)) {
$vars = session_guest_decode(session_guest_data($id));
echo "\$id=$id\n";
while(list($k,$v)=each($vars))
echo " $k=$v\n";
}
}
echo "==============\n";

echo "\n<A href=$PHP_SELF>반복실행</A>";
echo "\n<A href=$PHP_SELF?init=y>세션 초기화 후에 재실행</A>";

?> [/code]
세셔너 파일을 인클루드시키는 부분만 추가될 뿐이며 다른 것은 PHP4 세션 함수를 사용하는 방법과 동일합니다. 따라서 예제 코드에서 세셔너 파일을 인클루드하는 부분만 삭제하면 PHP4에서도 정상적으로(동일하게) 동작합니다.
위 예제에서 session_write() 함수는 쿠키용 세션핸들러에서만 필요한 함수입니다. 쿠키용이 아닌 세션핸들러에서는 이 함수를 사용하더라도 무시되며 이때문에 에러를 발생시키지는 않습니다. 이 함수에 대한 자세한 설명은 앞장을 참조바랍니다.
이벤트 파일 예제(event.sessioner.php)
위의 예제에서 사용된 이벤트 파일은 아래와 같습니다. session_event_path("./event")에 지시한 대로 현 웹문서가 있는 디렉토리에 있는 "event"라는 디렉토리에서 이벤트 파일을 찾게 됩니다.
[code php;gutter:false] <?php

function sessioner_onStart() {
static $i = 0;
$GLOBALS[event_test] .= "$i)sessioner_onStart()\n";
$i++;
}

function sessioner_onEnd() {
static $i = 0;
$GLOBALS[event_test] .= "$i)sessioner_onEnd()\n";
$i++;
}

?> [/code]

Posted by 방글24