note 11086 rejected from ref.session by yohgaki

From: 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. &lt;?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. ?>

« previous php.notes (#21656) next »