99 if (!defined(
'_ADODB_LAYER')) {
100 include (dirname(__FILE__).
'/adodb.inc.php');
103 if (!defined(
'ADODB_SESSION')) {
105 define(
'ADODB_SESSION',1);
108 define(
'ADODB_SESSION_SYNCH_SECS',60);
116 if (!$conn)
return false;
118 $old_id = session_id();
119 if (function_exists(
'session_regenerate_id')) {
120 session_regenerate_id();
122 session_id(md5(uniqid(rand(),
true)));
123 $ck = session_get_cookie_params();
124 setcookie(session_name(), session_id(),
false, $ck[
'path'], $ck[
'domain'], $ck[
'secure']);
127 $new_id = session_id();
128 $ok = $conn->Execute(
'UPDATE '.
ADODB_Session::table().
' SET sesskey='. $conn->qstr($new_id).
' WHERE sesskey='.$conn->qstr($old_id));
133 if (empty($ck)) $ck = session_get_cookie_params();
134 setcookie(session_name(), session_id(),
false, $ck[
'path'], $ck[
'domain'], $ck[
'secure']);
144 GLOBAL $ADODB_SESSION_CONNECT,
145 $ADODB_SESSION_DRIVER,
152 $ADODB_SESSION_EXPIRE_NOTIFY,
157 $ADODB_SESS_LIFE = ini_get(
'session.gc_maxlifetime');
158 if ($ADODB_SESS_LIFE <= 1) {
161 $ADODB_SESS_LIFE=1440;
163 $ADODB_SESSION_CRC =
false;
170 if (empty($ADODB_SESSION_DRIVER)) {
171 $ADODB_SESSION_DRIVER=
'mysql';
172 $ADODB_SESSION_CONNECT=
'localhost';
173 $ADODB_SESSION_USER =
'root';
174 $ADODB_SESSION_PWD =
'';
175 $ADODB_SESSION_DB =
'xphplens_2';
178 if (empty($ADODB_SESSION_EXPIRE_NOTIFY)) {
179 $ADODB_SESSION_EXPIRE_NOTIFY =
false;
182 if (empty($ADODB_SESSION_TBL)){
183 $ADODB_SESSION_TBL =
'sessions';
206 GLOBAL $ADODB_SESS_CONN;
207 if (isset($ADODB_SESS_CONN))
return true;
209 GLOBAL $ADODB_SESSION_CONNECT,
210 $ADODB_SESSION_DRIVER,
217 $ADODB_SESS_CONN = ADONewConnection($ADODB_SESSION_DRIVER);
218 if (!empty($ADODB_SESS_DEBUG)) {
219 $ADODB_SESS_CONN->debug =
true;
220 ADOConnection::outp(
" conn=$ADODB_SESSION_CONNECT user=$ADODB_SESSION_USER pwd=$ADODB_SESSION_PWD db=$ADODB_SESSION_DB ");
222 if ($persist)
$ok = $ADODB_SESS_CONN->PConnect($ADODB_SESSION_CONNECT,
223 $ADODB_SESSION_USER,$ADODB_SESSION_PWD,$ADODB_SESSION_DB);
224 else $ok = $ADODB_SESS_CONN->Connect($ADODB_SESSION_CONNECT,
225 $ADODB_SESSION_USER,$ADODB_SESSION_PWD,$ADODB_SESSION_DB);
227 if (!
$ok) ADOConnection::outp(
"
228 -- Session: connection failed</p>",
false);
234 function adodb_sess_close()
236 global $ADODB_SESS_CONN;
238 if ($ADODB_SESS_CONN) $ADODB_SESS_CONN->Close();
245 function adodb_sess_read($key)
247 global $ADODB_SESS_CONN,$ADODB_SESSION_TBL,$ADODB_SESSION_CRC;
249 $rs = $ADODB_SESS_CONN->Execute(
"SELECT data FROM $ADODB_SESSION_TBL WHERE sesskey = '$key' AND expiry >= " . time());
254 $v = rawurldecode(reset($rs->fields));
259 $ADODB_SESSION_CRC = strlen($v).crc32($v);
272 function adodb_sess_write($key, $val)
280 $ADODB_SESSION_EXPIRE_NOTIFY;
282 $expiry = time() + $ADODB_SESS_LIFE;
286 if ($ADODB_SESSION_CRC !==
false && $ADODB_SESSION_CRC == strlen($val).crc32($val)) {
287 if ($ADODB_SESS_DEBUG) echo
"
288 -- Session: Only updating date - crc32 not changed</p>";
289 $qry =
"UPDATE $ADODB_SESSION_TBL SET expiry=$expiry WHERE sesskey='$key' AND expiry >= " . time();
290 $rs = $ADODB_SESS_CONN->Execute($qry);
293 $val = rawurlencode($val);
295 $arr = array(
'sesskey' => $key,
'expiry' => $expiry,
'data' => $val);
296 if ($ADODB_SESSION_EXPIRE_NOTIFY) {
297 $var = reset($ADODB_SESSION_EXPIRE_NOTIFY);
299 $arr[
'expireref'] = $$var;
301 $rs = $ADODB_SESS_CONN->Replace($ADODB_SESSION_TBL,$arr,
302 'sesskey',$autoQuote =
true);
305 ADOConnection::outp(
'
306 -- Session Replace: '.$ADODB_SESS_CONN->ErrorMsg().
'</p>',
false);
310 if ($ADODB_SESS_CONN->databaseType ==
'access')
311 $rs = $ADODB_SESS_CONN->Execute(
"select sesskey from $ADODB_SESSION_TBL WHERE sesskey='$key'");
316 function adodb_sess_destroy($key)
318 global $ADODB_SESS_CONN, $ADODB_SESSION_TBL,$ADODB_SESSION_EXPIRE_NOTIFY;
320 if ($ADODB_SESSION_EXPIRE_NOTIFY) {
321 reset($ADODB_SESSION_EXPIRE_NOTIFY);
322 $fn = next($ADODB_SESSION_EXPIRE_NOTIFY);
323 $savem = $ADODB_SESS_CONN->SetFetchMode(ADODB_FETCH_NUM);
324 $rs = $ADODB_SESS_CONN->Execute(
"SELECT expireref,sesskey FROM $ADODB_SESSION_TBL WHERE sesskey='$key'");
325 $ADODB_SESS_CONN->SetFetchMode($savem);
327 $ADODB_SESS_CONN->BeginTrans();
329 $ref = $rs->fields[0];
330 $key = $rs->fields[1];
332 $del = $ADODB_SESS_CONN->Execute(
"DELETE FROM $ADODB_SESSION_TBL WHERE sesskey='$key'");
335 $ADODB_SESS_CONN->CommitTrans();
338 $qry =
"DELETE FROM $ADODB_SESSION_TBL WHERE sesskey = '$key'";
339 $rs = $ADODB_SESS_CONN->Execute($qry);
341 return $rs ?
true :
false;
346 global $ADODB_SESS_DEBUG, $ADODB_SESS_CONN, $ADODB_SESSION_TBL,$ADODB_SESSION_EXPIRE_NOTIFY;
348 if ($ADODB_SESSION_EXPIRE_NOTIFY) {
349 reset($ADODB_SESSION_EXPIRE_NOTIFY);
350 $fn = next($ADODB_SESSION_EXPIRE_NOTIFY);
351 $savem = $ADODB_SESS_CONN->SetFetchMode(ADODB_FETCH_NUM);
353 $rs = $ADODB_SESS_CONN->Execute(
"SELECT expireref,sesskey FROM $ADODB_SESSION_TBL WHERE expiry < $t");
354 $ADODB_SESS_CONN->SetFetchMode($savem);
356 $ADODB_SESS_CONN->BeginTrans();
358 $ref = $rs->fields[0];
359 $key = $rs->fields[1];
361 $del = $ADODB_SESS_CONN->Execute(
"DELETE FROM $ADODB_SESSION_TBL WHERE sesskey='$key'");
366 $ADODB_SESS_CONN->CommitTrans();
370 $qry =
"DELETE FROM $ADODB_SESSION_TBL WHERE expiry < " . time();
371 $ADODB_SESS_CONN->Execute($qry);
373 if ($ADODB_SESS_DEBUG) ADOConnection::outp(
"
374 -- <b>Garbage Collection</b>: $qry</p>");
377 if (defined(
'ADODB_SESSION_OPTIMIZE')) {
378 global $ADODB_SESSION_DRIVER;
380 switch( $ADODB_SESSION_DRIVER ) {
383 $opt_qry =
'OPTIMIZE TABLE '.$ADODB_SESSION_TBL;
387 $opt_qry =
'VACUUM '.$ADODB_SESSION_TBL;
390 if (!empty($opt_qry)) {
391 $ADODB_SESS_CONN->Execute($opt_qry);
394 if ($ADODB_SESS_CONN->dataProvider ===
'oci8') $sql =
'select TO_CHAR('.($ADODB_SESS_CONN->sysTimeStamp).
', \'RRRR-MM-DD HH24:MI:SS\') from '. $ADODB_SESSION_TBL;
395 else $sql =
'select '.$ADODB_SESS_CONN->sysTimeStamp.
' from '. $ADODB_SESSION_TBL;
397 $rs = $ADODB_SESS_CONN->SelectLimit($sql,1);
398 if ($rs && !$rs->EOF) {
400 $dbts = reset($rs->fields);
402 $dbt = $ADODB_SESS_CONN->UnixTimeStamp($dbts);
408 __FILE__.
": Server time for webserver {$_SERVER['HTTP_HOST']} not in synch with database: database=$dbt ($dbts), webserver=$t (diff=".(abs($dbt-$t)/3600).
" hrs)";
410 if ($ADODB_SESS_DEBUG) ADOConnection::outp(
"
418 session_module_name(
'user');
419 session_set_save_handler(
424 "adodb_sess_destroy",
433 session_register(
'AVAR');
434 $_SESSION[
'AVAR'] += 1;
435 ADOConnection::outp(
"
436 -- \$_SESSION['AVAR']={$_SESSION['AVAR']}</p>",
false);