89 if (!defined(
'_ADODB_LAYER')) {
90 include (dirname(__FILE__).
'/adodb.inc.php');
93 if (!defined(
'ADODB_SESSION')) {
95 define(
'ADODB_SESSION',1);
98 define(
'ADODB_SESSION_SYNCH_SECS',60);
103 GLOBAL $ADODB_SESSION_CONNECT,
104 $ADODB_SESSION_DRIVER,
111 $ADODB_SESSION_EXPIRE_NOTIFY,
113 $ADODB_SESSION_USE_LOBS,
116 if (!isset($ADODB_SESSION_USE_LOBS)) $ADODB_SESSION_USE_LOBS =
'CLOB';
118 $ADODB_SESS_LIFE = ini_get(
'session.gc_maxlifetime');
119 if ($ADODB_SESS_LIFE <= 1) {
122 $ADODB_SESS_LIFE=1440;
124 $ADODB_SESSION_CRC =
false;
131 if (empty($ADODB_SESSION_DRIVER)) {
132 $ADODB_SESSION_DRIVER=
'mysql';
133 $ADODB_SESSION_CONNECT=
'localhost';
134 $ADODB_SESSION_USER =
'root';
135 $ADODB_SESSION_PWD =
'';
136 $ADODB_SESSION_DB =
'xphplens_2';
139 if (empty($ADODB_SESSION_EXPIRE_NOTIFY)) {
140 $ADODB_SESSION_EXPIRE_NOTIFY =
false;
143 if (empty($ADODB_SESSION_TBL)){
144 $ADODB_SESSION_TBL =
'sessions';
149 if (!isset($ADODB_SESSION_USE_LOBS) || empty($ADODB_SESSION_USE_LOBS)) {
150 $ADODB_SESSION_USE_LOBS =
false;
173 GLOBAL $ADODB_SESS_CONN;
174 if (isset($ADODB_SESS_CONN))
return true;
176 GLOBAL $ADODB_SESSION_CONNECT,
177 $ADODB_SESSION_DRIVER,
184 $ADODB_SESS_CONN = ADONewConnection($ADODB_SESSION_DRIVER);
185 if (!empty($ADODB_SESS_DEBUG)) {
186 $ADODB_SESS_CONN->debug =
true;
187 ADOConnection::outp(
" conn=$ADODB_SESSION_CONNECT user=$ADODB_SESSION_USER pwd=$ADODB_SESSION_PWD db=$ADODB_SESSION_DB ");
189 if ($persist)
$ok = $ADODB_SESS_CONN->PConnect($ADODB_SESSION_CONNECT,
190 $ADODB_SESSION_USER,$ADODB_SESSION_PWD,$ADODB_SESSION_DB);
191 else $ok = $ADODB_SESS_CONN->Connect($ADODB_SESSION_CONNECT,
192 $ADODB_SESSION_USER,$ADODB_SESSION_PWD,$ADODB_SESSION_DB);
194 if (!
$ok) ADOConnection::outp(
"
195 -- Session: connection failed</p>",
false);
201 function adodb_sess_close()
203 global $ADODB_SESS_CONN;
205 if ($ADODB_SESS_CONN) $ADODB_SESS_CONN->Close();
212 function adodb_sess_read($key)
214 global $ADODB_SESS_CONN,$ADODB_SESSION_TBL,$ADODB_SESSION_CRC;
216 $rs = $ADODB_SESS_CONN->Execute(
"SELECT data FROM $ADODB_SESSION_TBL WHERE sesskey = '$key' AND expiry >= " . time());
221 $v = rawurldecode(reset($rs->fields));
226 $ADODB_SESSION_CRC = strlen($v).crc32($v);
239 function adodb_sess_write($key, $val)
247 $ADODB_SESSION_EXPIRE_NOTIFY,
248 $ADODB_SESSION_DRIVER,
249 $ADODB_SESSION_USE_LOBS;
251 $expiry = time() + $ADODB_SESS_LIFE;
255 if ($ADODB_SESSION_CRC !==
false && $ADODB_SESSION_CRC == strlen($val).crc32($val)) {
256 if ($ADODB_SESS_DEBUG) echo
"
257 -- Session: Only updating date - crc32 not changed</p>";
258 $qry =
"UPDATE $ADODB_SESSION_TBL SET expiry=$expiry WHERE sesskey='$key' AND expiry >= " . time();
259 $rs = $ADODB_SESS_CONN->Execute($qry);
262 $val = rawurlencode($val);
264 $arr = array(
'sesskey' => $key,
'expiry' => $expiry,
'data' => $val);
265 if ($ADODB_SESSION_EXPIRE_NOTIFY) {
266 $var = reset($ADODB_SESSION_EXPIRE_NOTIFY);
268 $arr[
'expireref'] = $$var;
272 if ($ADODB_SESSION_USE_LOBS ===
false) {
273 $rs = $ADODB_SESS_CONN->Replace($ADODB_SESSION_TBL,$arr,
'sesskey',$autoQuote =
true);
275 $err = $ADODB_SESS_CONN->ErrorMsg();
279 switch ($ADODB_SESSION_DRIVER) {
285 $lob_value = sprintf(
"empty_%s()", strtolower($ADODB_SESSION_USE_LOBS));
295 $res = $ADODB_SESS_CONN->Execute(
"select count(*) as cnt from $ADODB_SESSION_TBL where sesskey = '$key'");
296 if ($res && reset($res->fields) > 0) {
297 $qry = sprintf(
"update %s set expiry = %d, data = %s where sesskey = '%s'", $ADODB_SESSION_TBL, $expiry, $lob_value, $key);
300 $qry = sprintf(
"insert into %s (sesskey, expiry, data) values ('%s', %d, %s)", $ADODB_SESSION_TBL, $key, $expiry, $lob_value);
304 $rs1 = $ADODB_SESS_CONN->Execute($qry);
306 $err .= $ADODB_SESS_CONN->ErrorMsg().
"\n";
308 $rs2 = $ADODB_SESS_CONN->UpdateBlob($ADODB_SESSION_TBL,
'data', $val,
"sesskey='$key'", strtoupper($ADODB_SESSION_USE_LOBS));
310 $err .= $ADODB_SESS_CONN->ErrorMsg().
"\n";
312 $rs = ($rs1 && $rs2) ?
true :
false;
316 ADOConnection::outp(
'
317 -- Session Replace: '.nl2br($err).
'</p>',
false);
321 if ($ADODB_SESS_CONN->databaseType ==
'access')
322 $rs = $ADODB_SESS_CONN->Execute(
"select sesskey from $ADODB_SESSION_TBL WHERE sesskey='$key'");
327 function adodb_sess_destroy($key)
329 global $ADODB_SESS_CONN, $ADODB_SESSION_TBL,$ADODB_SESSION_EXPIRE_NOTIFY;
331 if ($ADODB_SESSION_EXPIRE_NOTIFY) {
332 reset($ADODB_SESSION_EXPIRE_NOTIFY);
333 $fn = next($ADODB_SESSION_EXPIRE_NOTIFY);
334 $savem = $ADODB_SESS_CONN->SetFetchMode(ADODB_FETCH_NUM);
335 $rs = $ADODB_SESS_CONN->Execute(
"SELECT expireref,sesskey FROM $ADODB_SESSION_TBL WHERE sesskey='$key'");
336 $ADODB_SESS_CONN->SetFetchMode($savem);
338 $ADODB_SESS_CONN->BeginTrans();
340 $ref = $rs->fields[0];
341 $key = $rs->fields[1];
343 $del = $ADODB_SESS_CONN->Execute(
"DELETE FROM $ADODB_SESSION_TBL WHERE sesskey='$key'");
346 $ADODB_SESS_CONN->CommitTrans();
349 $qry =
"DELETE FROM $ADODB_SESSION_TBL WHERE sesskey = '$key'";
350 $rs = $ADODB_SESS_CONN->Execute($qry);
352 return $rs ?
true :
false;
357 global $ADODB_SESS_DEBUG, $ADODB_SESS_CONN, $ADODB_SESSION_TBL,$ADODB_SESSION_EXPIRE_NOTIFY;
359 if ($ADODB_SESSION_EXPIRE_NOTIFY) {
360 reset($ADODB_SESSION_EXPIRE_NOTIFY);
361 $fn = next($ADODB_SESSION_EXPIRE_NOTIFY);
362 $savem = $ADODB_SESS_CONN->SetFetchMode(ADODB_FETCH_NUM);
364 $rs = $ADODB_SESS_CONN->Execute(
"SELECT expireref,sesskey FROM $ADODB_SESSION_TBL WHERE expiry < $t");
365 $ADODB_SESS_CONN->SetFetchMode($savem);
367 $ADODB_SESS_CONN->BeginTrans();
369 $ref = $rs->fields[0];
370 $key = $rs->fields[1];
372 $del = $ADODB_SESS_CONN->Execute(
"DELETE FROM $ADODB_SESSION_TBL WHERE sesskey='$key'");
378 $ADODB_SESS_CONN->CommitTrans();
382 $ADODB_SESS_CONN->Execute(
"DELETE FROM $ADODB_SESSION_TBL WHERE expiry < " . time());
384 if ($ADODB_SESS_DEBUG) ADOConnection::outp(
"
385 -- <b>Garbage Collection</b>: $qry</p>");
388 if (defined(
'ADODB_SESSION_OPTIMIZE')) {
389 global $ADODB_SESSION_DRIVER;
391 switch( $ADODB_SESSION_DRIVER ) {
394 $opt_qry =
'OPTIMIZE TABLE '.$ADODB_SESSION_TBL;
398 $opt_qry =
'VACUUM '.$ADODB_SESSION_TBL;
401 if (!empty($opt_qry)) {
402 $ADODB_SESS_CONN->Execute($opt_qry);
405 if ($ADODB_SESS_CONN->dataProvider ===
'oci8') $sql =
'select TO_CHAR('.($ADODB_SESS_CONN->sysTimeStamp).
', \'RRRR-MM-DD HH24:MI:SS\') from '. $ADODB_SESSION_TBL;
406 else $sql =
'select '.$ADODB_SESS_CONN->sysTimeStamp.
' from '. $ADODB_SESSION_TBL;
408 $rs = $ADODB_SESS_CONN->SelectLimit($sql,1);
409 if ($rs && !$rs->EOF) {
411 $dbts = reset($rs->fields);
413 $dbt = $ADODB_SESS_CONN->UnixTimeStamp($dbts);
417 __FILE__.
": Server time for webserver {$_SERVER['HTTP_HOST']} not in synch with database: database=$dbt ($dbts), webserver=$t (diff=".(abs($dbt-$t)/3600).
" hrs)";
419 if ($ADODB_SESS_DEBUG) ADOConnection::outp(
"
427 session_module_name(
'user');
428 session_set_save_handler(
433 "adodb_sess_destroy",
442 session_register(
'AVAR');
443 $_SESSION[
'AVAR'] += 1;
444 ADOConnection::outp(
"
445 -- \$_SESSION['AVAR']={$_SESSION['AVAR']}</p>",
false);