phpclass/객체정보2000. 12. 28. 15:13
저장 매체의 변경
세셔너 함수를 작성하는데 추상클래스를 이용하였으면, 그 이점이 있어야 할 것 아닙니까? 그 한 예로 공개된 세셔너 함수에서 사용하고 있는 파일 시스템 대신에 데이터베이스를 이용하여 보도록 하겠습니다. 다른 클래스는 건드릴 필요가 전혀 없으며 오로지 클래스 sessStaticDevice 만 아래에 있는 클래스로 대체시키면 됩니다.
[code php;gutter:false] 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."'");
}
} [/code]
세셔너 데이터 저장용 테이블 생성
데이터베이스를 이용하기 때문에 먼저 세션 데이터를 저장할 테이블을 생성하여야 합니다. 아래는 MySQL 데이터베이스의 테이블을 생성하기 위한 SQL 문을 나타내었습니다.
[code sql;gutter:false] CREATE TABLE Sessioner (
id varchar(32) not null PRIMARY KEY,
value text not null,
lastused int(8)
); [/code]
session_start() 함수 수정
또 하나 추가로 처리하여야 할 것은 데이터베이스를 세셔너 함수 내에서 사용하기 위한 함수가 하나 추가되었습니다. 그것은 prvInitBase() 함수이며, 이 함수에서는 클래스 $sessStatic 내에서 사용할 데이터베이스 객체를 생성하는 역할을 합니다. session_start() 함수에서 스크립트 실행 후 단 한번만 실행시켜 주면 됩니다.
[code php;gutter:false] function session_start() {
//
// 데이터베이스를 이용하기 위해 새로 추가된 부분
//
$GLOBALS["sessStatic"]->prvInitBase();
return $GLOBALS["sessStatic"]->prvStart();
} [/code]
미니디비 파일 인클루드 및 객체 생성
데이터베이스 예제는 제가 공개한 미니디비를 이용하였기 때문에, 사용자 프로그램에서 세셔너 파일을 인클루드 하기 전에 미니디비 파일을 인클루드하여야 하며, session_start() 함수를 실행하기 전에 미니디비 클래스를 이용하여 데이터베이스 객체를 생성하여야 합니다. 이 때 객체명은 사용자가 임의로 지정할 수 있습니다.
[code php;gutter:false] <?php

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

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

session_start();

......

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

'phpclass > 객체정보' 카테고리의 다른 글

{참조}2.객체생성에서의 참조  (0) 2001.03.02
{참조}1.참조변수의 생성  (0) 2001.03.02
{추상클래스}5.세셔너 분석  (0) 2000.12.28
{추상클래스}4.PHP  (0) 2000.12.28
{추상클래스}3.자바  (0) 2000.12.28
Posted by 방글24