I write Oracle session handler based on mysql session handler. But my oracle's is not running normaly.
if session start, then sessid dosen't go into oracle db, but into /tmp in file.
so i am wondering which not complete.
Correct my code.
thanks.
<?
// oracle session handler
/*
CREATE TABLE sessions
(
sesskey VARCHAR2(32) NOT NULL,
expiry NUMBER(11) NOT NULL,
data VARCHAR2(2000) NOT NULL
)
*/
$ora_sid = "your_sid" ;
$ora_user = "your_user" ;
$ora_pass = "your_pass" ;
$ora_conn = "" ;
$sess_life = 60 ; // 1 min
function ora_sess_open($svae_path, $session_name) {
global $ora_sid, $ora_user, $ora_pass, $ora_sess, $sess_life ;
$ora_conn = OCILogon ($ora_user, $ora_pass, $ora_sid) ;
return true ;
}
function ora_sess_close() {
return true ;
}
function ora_sess_read($key) {
global $ora_conn, $sess_life ;
$q_read = "SELECT data FROM sessions WHERE sesskey = '$key' AND expiry > ".time() ;
$s_read = OCIParse($ora_conn, $q_read) ;
OCIExecute($ora_conn, $s_read) ;
if (OCIFetchInto($s_read, $rows, OCI_DEFAULT))
return $rows["DATA"] ;
else return false ;
}
function ora_sess_write($key, $val) {
global $ora_conn, $sess_life ;
$expiry = time() + $sess_life ;
$value = addslashes($val) ;
$q_insert = "INSERT INTO sessions VALUES ('$key', $expiry, '$value') " ;
$s_insert = OCIParse($ora_conn, $q_insert) ;
$id_insert = OCIExecute($ora_conn, $s_insert) ;
/*
if (OCIError($s_insert)) {
OCIRollback ($ora_conn) ;
$q_update = "UPDATE sessions SET expiry = $expiry, data = '$value' WHERE sesskey = '$key' " ;
$s_update = OCIParse($ora_conn, $q_update) ;
OCIExecute($ora_conn, $s_update) ;
OCICommit($ora_conn) ;
} else
*/
OCICommit($ora_conn) ;
return $id_insert ;
}
function ora_sess_destroy($key) {
global $ora_conn ;
$q_delete = "DELETE FROM session WHERE sesskey = '$key' " ;
$s_delete = OCIParse($ora_conn, $q_delete) ;
OCIExecute($ora_conn, $s_delete) ;
OCICommit($ora_conn) ;
return true ;
}
function ora_sess_gc($maxlifetime) {
global $ora_conn, $sess_life ;
$q_gc = "DELETE FROM session WHERE expiry <".time() ;
$s_gc = OCIParse($ora_conn, $q_gc) ;
OCIExecute($ora_conn, $s_gc) ;
OCICommit($ora_conn) ;
return true ;
}
session_set_save_handler(
"ora_sess_open",
"ora_sess_close",
"ora_sess_read",
"ora_sess_write",
"ora_sess_destroy",
"ora_sess_gc"
);
?>