\$HTTP_SESSION_VARS['AVAR']={$HTTP_SESSION_VARS['AVAR']}
"; To force non-persistent connections, call adodb_session_open first before session_start(): GLOBAL $HTTP_SESSION_VARS; include('adodb.inc.php'); include('adodb-session.php'); adodb_session_open(false,false,false); session_start(); session_register('AVAR'); $HTTP_SESSION_VARS['AVAR'] += 1; print "\$HTTP_SESSION_VARS['AVAR']={$HTTP_SESSION_VARS['AVAR']}
"; Installation ============ 1. Create this table in your database (syntax might vary depending on your db): create table sessions ( SESSKEY char(32) not null, EXPIRY int(11) unsigned not null, DATA text not null, primary key (sesskey) ); 2. Then define the following parameters in this file: $ADODB_SESSION_DRIVER='database driver, eg. mysql or ibase'; $ADODB_SESSION_CONNECT='server to connect to'; $ADODB_SESSION_USER ='user'; $ADODB_SESSION_PWD ='password'; $ADODB_SESSION_DB ='database'; $ADODB_SESSION_TBL = 'sessions' 3. Recommended is PHP 4.0.6 or later. There are documented session bugs in earlier versions of PHP. */ if (!defined('_ADODB_LAYER')) { include (dirname(__FILE__).'/adodb.inc.php'); } if (!defined('ADODB_SESSION')) { define('ADODB_SESSION',1); /* if database time and system time is difference is greater than this, then give warning */ define('ADODB_SESSION_SYNCH_SECS',60); /****************************************************************************************\ Global definitions \****************************************************************************************/ GLOBAL $ADODB_SESSION_CONNECT, $ADODB_SESSION_DRIVER, $ADODB_SESSION_USER, $ADODB_SESSION_PWD, $ADODB_SESSION_DB, $ADODB_SESS_CONN, $ADODB_SESS_LIFE, $ADODB_SESS_DEBUG, $ADODB_SESSION_CRC; $ADODB_SESS_LIFE = ini_get('session.gc_maxlifetime'); if ($ADODB_SESS_LIFE <= 1) { // bug in PHP 4.0.3 pl 1 -- how about other versions? //print "Session: connection failed
",false); } /****************************************************************************************\ Close the connection \****************************************************************************************/ function adodb_sess_close() { global $ADODB_SESS_CONN; if ($ADODB_SESS_CONN) $ADODB_SESS_CONN->Close(); return true; } /****************************************************************************************\ Slurp in the session variables and return the serialized string \****************************************************************************************/ function adodb_sess_read($key) { global $ADODB_SESS_CONN,$ADODB_SESSION_TBL,$ADODB_SESSION_CRC; $rs = $ADODB_SESS_CONN->Execute("SELECT data FROM $ADODB_SESSION_TBL WHERE sesskey = '$key' AND expiry >= " . time()); if ($rs) { if ($rs->EOF) { $v = ''; } else $v = rawurldecode(reset($rs->fields)); $rs->Close(); // new optimization adodb 2.1 $ADODB_SESSION_CRC = strlen($v).crc32($v); return $v; } return ''; // thx to Jorma Tuomainen, webmaster#wizactive.com } /****************************************************************************************\ Write the serialized data to a database. If the data has not been modified since adodb_sess_read(), we do not write. \****************************************************************************************/ function adodb_sess_write($key, $val) { global $ADODB_SESS_CONN, $ADODB_SESS_LIFE, $ADODB_SESSION_TBL, $ADODB_SESS_DEBUG, $ADODB_SESSION_CRC; $expiry = time() + $ADODB_SESS_LIFE; // crc32 optimization since adodb 2.1 // now we only update expiry date, thx to sebastian thom in adodb 2.32 if ($ADODB_SESSION_CRC !== false && $ADODB_SESSION_CRC == strlen($val).crc32($val)) { if ($ADODB_SESS_DEBUG) echo "Session: Only updating date - crc32 not changed
"; $qry = "UPDATE $ADODB_SESSION_TBL SET expiry=$expiry WHERE sesskey='$key' AND expiry >= " . time(); $rs = $ADODB_SESS_CONN->Execute($qry); return true; } $val = rawurlencode($val); $rs = $ADODB_SESS_CONN->Replace($ADODB_SESSION_TBL, array('sesskey' => $key, 'expiry' => $expiry, 'data' => $val), 'sesskey',$autoQuote = true); if (!$rs) { ADOConnection::outp( 'Session Replace: '.$ADODB_SESS_CONN->ErrorMsg().'
',false); } else { // bug in access driver (could be odbc?) means that info is not commited // properly unless select statement executed in Win2000 if ($ADODB_SESS_CONN->databaseType == 'access') $rs = $ADODB_SESS_CONN->Execute("select sesskey from $ADODB_SESSION_TBL WHERE sesskey='$key'"); } return !empty($rs); } function adodb_sess_destroy($key) { global $ADODB_SESS_CONN, $ADODB_SESSION_TBL; $qry = "DELETE FROM $ADODB_SESSION_TBL WHERE sesskey = '$key'"; $rs = $ADODB_SESS_CONN->Execute($qry); return $rs ? true : false; } function adodb_sess_gc($maxlifetime) { global $ADODB_SESS_DEBUG, $ADODB_SESS_CONN, $ADODB_SESSION_TBL; $qry = "DELETE FROM $ADODB_SESSION_TBL WHERE expiry < " . time(); $ADODB_SESS_CONN->Execute($qry); if ($ADODB_SESS_DEBUG) ADOConnection::outp("Garbage Collection: $qry
"); // suggested by Cameron, "GaM3R"$msg
"); } } return true; } session_module_name('user'); session_set_save_handler( "adodb_sess_open", "adodb_sess_close", "adodb_sess_read", "adodb_sess_write", "adodb_sess_destroy", "adodb_sess_gc"); } /* TEST SCRIPT -- UNCOMMENT */ if (0) { GLOBAL $HTTP_SESSION_VARS; session_start(); session_register('AVAR'); $HTTP_SESSION_VARS['AVAR'] += 1; ADOConnection::outp( "\$HTTP_SESSION_VARS['AVAR']={$HTTP_SESSION_VARS['AVAR']}
",false); } ?>