note 11086 rejected from ref.session by yohgaki
| From: | yohgaki@php.net | Date: | Thu, 06 Dec 2001 03:49:37 +0000 |
| Subject: | note 11086 rejected from ref.session by yohgaki | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-21656@lists.php.net to get a copy of this message | ||
I couldn't find example code to use session with PostgreSQL. So I post this.
<?php
/*
* User defined session handlers for PostgreSQL
*
PostgreSQL Table
CREATE TABLE "sys_session" (
"session_id" character varying(32) NOT NULL,
"last_update" integer NOT NULL,
"session_data" text,
PRIMARY KEY ("session_id")
);
CREATE INDEX "sys_session_last_update_idx" on "sys_session" using btree (
"last_update" );
* Change constant SESS_CONN, SESS_TABLE, SESS_DATA_MAX to meet your environment.
* (Do not set SESS_DATA_MAX = PostgreSQL's PageSize.
* It must be equal or less than (PageSize - OtherFields' space - PageOverHead)
*
* Error handler, etc needed for production use.
* Errors are logged in file or syslog accoding to php.ini
*
*/
define('SESS_CONN','host=localhost port=5432 dbname=session user=yohgaki');
define('SESS_TABLE','sys_session');
define('SESS_DATA_MAX','7500');
function pg_session_open ($save_path, $session_name) {
// It's possible to initilize data using ini values etc. I would rather not to use
// global vars, so I don't do anything.
return true;
}
function pg_session_close() {
return true;
}
function pg_session_read ($session_id) {
$db = pg_pconnect(SESS_CONN);
if (!$db) error_log('session_read(): Cannot connect to database.',0);
$session_id = addslashes($session_id);
$query = 'SELECT session_data FROM '. SESS_TABLE ." WHERE session_id =
'$session_id'";
$result = pg_exec($db, $query);
if (pg_numrows($result) == 1) {
$session_data = pg_result($result,0,'session_data');
return $session_data;
} else {
return "";
}
}
function pg_session_write ($session_id, $session_data) {
if (strlen($session_data) > intval(SESS_DATA_MAX)) error_log('Session data too large.
Unable to update session data for session $session_id',0);
$db = pg_pconnect(SESS_CONN);
if (!$db) error_log("session_wriete(): Cannot connect to database.",0);
$session_id = addslashes($session_id);
$session_data = addslashes($session_data);
$query = 'SELECT session_id FROM '. SESS_TABLE ." WHERE session_id =
'$session_id'";
$result = pg_exec($db,$query);
$session_exist = pg_numrows($result);
if ($session_exist == 0) {
$query = 'INSERT INTO '. SESS_TABLE ." (session_id, last_update, session_data)
VALUES ('$session_id', ". time() .", '$session_data')";
}
else {
$query = 'UPDATE '. SESS_TABLE ." SET session_data = '$session_data',
last_update = ". time() ." WHERE session_id = '$session_id'";
}
$rows_affected = pg_cmdtuples(pg_exec($db,$query));
error_log($query,0);
if (!$rows_affected) error_log('session_wriete(): Failed to INSERT or UPDATE
session.',0);
return $rows_affected;
}
function pg_session_destroy ($session_id) {
$db = pg_pconnect(SESS_CONN);
if (!$db) error_log("session_destory(): Cannot connect to database.",0);
$session_id = addslashes($session_id);
$rows_affected = pg_cmdtuples(pg_exec($db, 'DELETE FROM '. SESS_TABLE ." WHERE
session_id = '$session_id'"));
if (!$rows_affected) error_log("session_destory(): Failed to DELETE session. Nonexistent
Session?.",0);
return $rows_affected;
}
function pg_session_gc ($maxlifetime = 4000) {
$db = pg_pconnect(SESS_CONN);
if (!$db) error_log("session_gc(): Failed to connect database",0);
$active = time() - $maxlifetime;
pg_exec($db, 'DELETE FROM '. SESS_TABLE ." WHERE last_update < $active");
if (pg_errormessage($db)) {
error_log('session_gc(): Failed to DELETE old sessions.',0);
return false;
}
else
return true;
}
session_set_save_handler (
'pg_session_open',
'pg_session_close',
'pg_session_read',
'pg_session_write',
'pg_session_destroy',
'pg_session_gc'
);
session_start(); // not needed if auto start is enabled.
?>