저장 매체의 변경
세셔너 함수를 작성하는데 추상클래스를 이용하였으면, 그 이점이 있어야 할 것 아닙니까? 그 한 예로 공개된 세셔너 함수에서 사용하고 있는 파일 시스템 대신에 데이터베이스를 이용하여 보도록 하겠습니다. 다른 클래스는 건드릴 필요가 전혀 없으며 오로지 클래스 sessStaticDevice 만 아래에 있는 클래스로 대체시키면 됩니다.
 class sessStaticDevice extends sessStaticID {
  var $startedPath;
  var $BaseClass = "baseDbsql";
  var $BaseObject;

  function sessStaticDevice() {
    $this->sessStaticID();
    $this->Path = "Sessioner";
  }

  function _sessStaticDevice() {
    $this->_sessStaticID();
  }

  function prvStartedDevice($path) {
    $this->startedPath = $path;
  }

  function prvInitBase() {
    if (!is_object($this->BaseObject)) {
      $base = $this->BaseClass;
      $this->BaseObject = new $base;
    }
  }

  function prvGc() {
    $this->BaseObject->query("SELECT id FROM ".$this->startedPath." WHERE lastused < ".(time() - $this->Maxlifetime));
    while ($record=$this->BaseObject->next_record())
      $id_arr[] = $record["id"];
    if (is_array($id_arr)) {
      reset($id_arr);
      while (list(,$id)=each($id_arr)) {
        $this->prvOnEnd();
        $this->BaseObject->query("DELETE FROM ".$this->startedPath." WHERE id='$id'");
      }
    }
    list($rows,$fields) = $this->BaseObject->query("SELECT id FROM ".$this->startedPath);
    return $rows;
  }

  function prvRead() {
    $this->BaseObject->query("SELECT value, lastused FROM ".$this->startedPath." WHERE id='".$this->ID."'");

    if ($record=$this->BaseObject->next_record())
      return stripslashes($record["value"]);
    return false;
  }

  function prvWrite($value) {
    $this->BaseObject->query("REPLACE INTO ".$this->startedPath." (id, value, lastused) "."VALUES ('".$this->ID."', '".addslashes($value)."', ".time().")");
    }

  function prvDestroyDevice() {
    $this->BaseObject->query("DELETE FROM ".$this->startedPath." WHERE id='".$this->ID."'");
  }
}
세셔너 데이터 저장용 테이블 생성
데이터베이스를 이용하기 때문에 먼저 세션 데이터를 저장할 테이블을 생성하여야 합니다. 아래는 MySQL 데이터베이스의 테이블을 생성하기 위한 SQL 문을 나타내었습니다.
 CREATE TABLE Sessioner (
  id varchar(32) not null PRIMARY KEY,
  value text not null,
  lastused int(8)
 );
session_start() 함수 수정
또 하나 추가로 처리하여야 할 것은 데이터베이스를 세셔너 함수 내에서 사용하기 위한 함수가 하나 추가되었습니다. 그것은 prvInitBase() 함수이며, 이 함수에서는 클래스 $sessStatic 내에서 사용할 데이터베이스 객체를 생성하는 역할을 합니다. session_start() 함수에서 스크립트 실행 후 단 한번만 실행시켜 주면 됩니다.
 function session_start() {
  //
   // 데이터베이스를 이용하기 위해 새로 추가된 부분
   //
   $GLOBALS["sessStatic"]->prvInitBase();
   return $GLOBALS["sessStatic"]->prvStart();
}
미니디비 파일 인클루드 및 객체 생성
데이터베이스 예제는 제가 공개한 미니디비를 이용하였기 때문에, 사용자 프로그램에서 세셔너 파일을 인클루드 하기 전에 미니디비 파일을 인클루드하여야 하며, session_start() 함수를 실행하기 전에 미니디비 클래스를 이용하여 데이터베이스 객체를 생성하여야 합니다. 이 때 객체명은 사용자가 임의로 지정할 수 있습니다.
 <?php

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

$base = new baseDbsql("호스트명","사용자ID","비밀번호","디비명");

session_start();

......

?>
"......" 부분은 이미 공개한 세셔너함수-0.2.0 또는 0.2.1과 사용방법이 동일합니다. 물론 PHP4 세션함수 사용법과도 동일합니다. 데이터베이스용 세셔너함수에 대한 자료는 파일로 공개하지 않겠습니다. 필요한 것은 이곳에 모두 있기 때문에 여러분이 잘 이해하신 후 사용하시면 제대로 동작할 것입니다.