TYPO3 CMS  TYPO3_7-6
adodb-session.php
Go to the documentation of this file.
1 <?php
2 
3 
4 /*
5 @version v5.20.3 01-Jan-2016
6 @copyright (c) 2000-2013 John Lim (jlim#natsoft.com). All rights reserved.
7 @copyright (c) 2014 Damien Regad, Mark Newnham and the ADOdb community
8  Contributed by Ross Smith (adodb@netebb.com).
9  Released under both BSD license and Lesser GPL library license.
10  Whenever there is any discrepancy between the two licenses,
11  the BSD license will take precedence.
12  Set tabs to 4 for best viewing.
13 */
14 
15 /*
16  You may want to rename the 'data' field to 'session_data' as
17  'data' appears to be a reserved word for one or more of the following:
18  ANSI SQL
19  IBM DB2
20  MS SQL Server
21  Postgres
22  SAP
23 
24  If you do, then execute:
25 
26  ADODB_Session::dataFieldName('session_data');
27 
28 */
29 
30 if (!defined('_ADODB_LAYER')) {
31  require realpath(dirname(__FILE__) . '/../adodb.inc.php');
32 }
33 
34 if (defined('ADODB_SESSION')) return 1;
35 
36 define('ADODB_SESSION', dirname(__FILE__));
37 
38 
39 /*
40  Unserialize session data manually. See http://phplens.com/lens/lensforum/msgs.php?id=9821
41 
42  From Kerr Schere, to unserialize session data stored via ADOdb.
43  1. Pull the session data from the db and loop through it.
44  2. Inside the loop, you will need to urldecode the data column.
45  3. After urldecode, run the serialized string through this function:
46 
47 */
48 function adodb_unserialize( $serialized_string )
49 {
50  $variables = array( );
51  $a = preg_split( "/(\w+)\|/", $serialized_string, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE );
52  for( $i = 0; $i < count( $a ); $i = $i+2 ) {
53  $variables[$a[$i]] = unserialize( $a[$i+1] );
54  }
55  return( $variables );
56 }
57 
58 /*
59  Thanks Joe Li. See http://phplens.com/lens/lensforum/msgs.php?id=11487&x=1
60  Since adodb 4.61.
61 */
63 {
65  if (!$conn) return false;
66 
67  $old_id = session_id();
68  if (function_exists('session_regenerate_id')) {
69  session_regenerate_id();
70  } else {
71  session_id(md5(uniqid(rand(), true)));
72  $ck = session_get_cookie_params();
73  setcookie(session_name(), session_id(), false, $ck['path'], $ck['domain'], $ck['secure']);
74  //@session_start();
75  }
76  $new_id = session_id();
77  $ok = $conn->Execute('UPDATE '. ADODB_Session::table(). ' SET sesskey='. $conn->qstr($new_id). ' WHERE sesskey='.$conn->qstr($old_id));
78 
79  /* it is possible that the update statement fails due to a collision */
80  if (!$ok) {
81  session_id($old_id);
82  if (empty($ck)) $ck = session_get_cookie_params();
83  setcookie(session_name(), session_id(), false, $ck['path'], $ck['domain'], $ck['secure']);
84  return false;
85  }
86 
87  return true;
88 }
89 
90 /*
91  Generate database table for session data
92  @see http://phplens.com/lens/lensforum/msgs.php?id=12280
93  @return 0 if failure, 1 if errors, 2 if successful.
94  @author Markus Staab http://www.public-4u.de
95 */
96 function adodb_session_create_table($schemaFile=null,$conn = null)
97 {
98  // set default values
99  if ($schemaFile===null) $schemaFile = ADODB_SESSION . '/session_schema.xml';
100  if ($conn===null) $conn = ADODB_Session::_conn();
101 
102  if (!$conn) return 0;
103 
104  $schema = new adoSchema($conn);
105  $schema->ParseSchema($schemaFile);
106  return $schema->ExecuteSchema();
107 }
108 
114  // getter/setter methods
116 
117  /*
118 
119  function Lock($lock=null)
120  {
121  static $_lock = false;
122 
123  if (!is_null($lock)) $_lock = $lock;
124  return $lock;
125  }
126  */
129  function driver($driver = null) {
130  static $_driver = 'mysql';
131  static $set = false;
132 
133  if (!is_null($driver)) {
134  $_driver = trim($driver);
135  $set = true;
136  } elseif (!$set) {
137  // backwards compatibility
138  if (isset($GLOBALS['ADODB_SESSION_DRIVER'])) {
139  return $GLOBALS['ADODB_SESSION_DRIVER'];
140  }
141  }
142 
143  return $_driver;
144  }
145 
148  function host($host = null) {
149  static $_host = 'localhost';
150  static $set = false;
151 
152  if (!is_null($host)) {
153  $_host = trim($host);
154  $set = true;
155  } elseif (!$set) {
156  // backwards compatibility
157  if (isset($GLOBALS['ADODB_SESSION_CONNECT'])) {
158  return $GLOBALS['ADODB_SESSION_CONNECT'];
159  }
160  }
161 
162  return $_host;
163  }
164 
167  function user($user = null) {
168  static $_user = 'root';
169  static $set = false;
170 
171  if (!is_null($user)) {
172  $_user = trim($user);
173  $set = true;
174  } elseif (!$set) {
175  // backwards compatibility
176  if (isset($GLOBALS['ADODB_SESSION_USER'])) {
177  return $GLOBALS['ADODB_SESSION_USER'];
178  }
179  }
180 
181  return $_user;
182  }
183 
186  function password($password = null) {
187  static $_password = '';
188  static $set = false;
189 
190  if (!is_null($password)) {
191  $_password = $password;
192  $set = true;
193  } elseif (!$set) {
194  // backwards compatibility
195  if (isset($GLOBALS['ADODB_SESSION_PWD'])) {
196  return $GLOBALS['ADODB_SESSION_PWD'];
197  }
198  }
199 
200  return $_password;
201  }
202 
205  function database($database = null) {
206  static $_database = 'xphplens_2';
207  static $set = false;
208 
209  if (!is_null($database)) {
210  $_database = trim($database);
211  $set = true;
212  } elseif (!$set) {
213  // backwards compatibility
214  if (isset($GLOBALS['ADODB_SESSION_DB'])) {
215  return $GLOBALS['ADODB_SESSION_DB'];
216  }
217  }
218 
219  return $_database;
220  }
221 
224  function persist($persist = null)
225  {
226  static $_persist = true;
227 
228  if (!is_null($persist)) {
229  $_persist = trim($persist);
230  }
231 
232  return $_persist;
233  }
234 
237  function lifetime($lifetime = null) {
238  static $_lifetime;
239  static $set = false;
240 
241  if (!is_null($lifetime)) {
242  $_lifetime = (int) $lifetime;
243  $set = true;
244  } elseif (!$set) {
245  // backwards compatibility
246  if (isset($GLOBALS['ADODB_SESS_LIFE'])) {
247  return $GLOBALS['ADODB_SESS_LIFE'];
248  }
249  }
250  if (!$_lifetime) {
251  $_lifetime = ini_get('session.gc_maxlifetime');
252  if ($_lifetime <= 1) {
253  // bug in PHP 4.0.3 pl 1 -- how about other versions?
254  //print "<h3>Session Error: PHP.INI setting <i>session.gc_maxlifetime</i>not set: $lifetime</h3>";
255  $_lifetime = 1440;
256  }
257  }
258 
259  return $_lifetime;
260  }
261 
264  function debug($debug = null) {
265  static $_debug = false;
266  static $set = false;
267 
268  if (!is_null($debug)) {
269  $_debug = (bool) $debug;
270 
272  if ($conn) {
273  $conn->debug = $_debug;
274  }
275  $set = true;
276  } elseif (!$set) {
277  // backwards compatibility
278  if (isset($GLOBALS['ADODB_SESS_DEBUG'])) {
279  return $GLOBALS['ADODB_SESS_DEBUG'];
280  }
281  }
282 
283  return $_debug;
284  }
285 
288  function expireNotify($expire_notify = null) {
289  static $_expire_notify;
290  static $set = false;
291 
292  if (!is_null($expire_notify)) {
293  $_expire_notify = $expire_notify;
294  $set = true;
295  } elseif (!$set) {
296  // backwards compatibility
297  if (isset($GLOBALS['ADODB_SESSION_EXPIRE_NOTIFY'])) {
298  return $GLOBALS['ADODB_SESSION_EXPIRE_NOTIFY'];
299  }
300  }
301 
302  return $_expire_notify;
303  }
304 
307  function table($table = null) {
308  static $_table = 'sessions';
309  static $set = false;
310 
311  if (!is_null($table)) {
312  $_table = trim($table);
313  $set = true;
314  } elseif (!$set) {
315  // backwards compatibility
316  if (isset($GLOBALS['ADODB_SESSION_TBL'])) {
317  return $GLOBALS['ADODB_SESSION_TBL'];
318  }
319  }
320 
321  return $_table;
322  }
323 
326  function optimize($optimize = null) {
327  static $_optimize = false;
328  static $set = false;
329 
330  if (!is_null($optimize)) {
331  $_optimize = (bool) $optimize;
332  $set = true;
333  } elseif (!$set) {
334  // backwards compatibility
335  if (defined('ADODB_SESSION_OPTIMIZE')) {
336  return true;
337  }
338  }
339 
340  return $_optimize;
341  }
342 
345  function syncSeconds($sync_seconds = null) {
346  static $_sync_seconds = 60;
347  static $set = false;
348 
349  if (!is_null($sync_seconds)) {
350  $_sync_seconds = (int) $sync_seconds;
351  $set = true;
352  } elseif (!$set) {
353  // backwards compatibility
354  if (defined('ADODB_SESSION_SYNCH_SECS')) {
355  return ADODB_SESSION_SYNCH_SECS;
356  }
357  }
358 
359  return $_sync_seconds;
360  }
361 
364  function clob($clob = null) {
365  static $_clob = false;
366  static $set = false;
367 
368  if (!is_null($clob)) {
369  $_clob = strtolower(trim($clob));
370  $set = true;
371  } elseif (!$set) {
372  // backwards compatibility
373  if (isset($GLOBALS['ADODB_SESSION_USE_LOBS'])) {
374  return $GLOBALS['ADODB_SESSION_USE_LOBS'];
375  }
376  }
377 
378  return $_clob;
379  }
380 
383  function dataFieldName($data_field_name = null) {
384  static $_data_field_name = 'data';
385 
386  if (!is_null($data_field_name)) {
387  $_data_field_name = trim($data_field_name);
388  }
389 
390  return $_data_field_name;
391  }
392 
395  function filter($filter = null) {
396  static $_filter = array();
397 
398  if (!is_null($filter)) {
399  if (!is_array($filter)) {
400  $filter = array($filter);
401  }
402  $_filter = $filter;
403  }
404 
405  return $_filter;
406  }
407 
410  function encryptionKey($encryption_key = null) {
411  static $_encryption_key = 'CRYPTED ADODB SESSIONS ROCK!';
412 
413  if (!is_null($encryption_key)) {
414  $_encryption_key = $encryption_key;
415  }
416 
417  return $_encryption_key;
418  }
419 
421  // private methods
423 
426  function _conn($conn=null) {
427  return $GLOBALS['ADODB_SESS_CONN'];
428  }
429 
432  function _crc($crc = null) {
433  static $_crc = false;
434 
435  if (!is_null($crc)) {
436  $_crc = $crc;
437  }
438 
439  return $_crc;
440  }
441 
444  function _init() {
445  session_module_name('user');
446  session_set_save_handler(
447  array('ADODB_Session', 'open'),
448  array('ADODB_Session', 'close'),
449  array('ADODB_Session', 'read'),
450  array('ADODB_Session', 'write'),
451  array('ADODB_Session', 'destroy'),
452  array('ADODB_Session', 'gc')
453  );
454  }
455 
456 
459  function _sessionKey() {
460  // use this function to create the encryption key for crypted sessions
461  // crypt the used key, ADODB_Session::encryptionKey() as key and session_id() as salt
462  return crypt(ADODB_Session::encryptionKey(), session_id());
463  }
464 
467  function _dumprs($rs) {
469  $debug = ADODB_Session::debug();
470 
471  if (!$conn) {
472  return;
473  }
474 
475  if (!$debug) {
476  return;
477  }
478 
479  if (!$rs) {
480  echo "<br />\$rs is null or false<br />\n";
481  return;
482  }
483 
484  //echo "<br />\nAffected_Rows=",$conn->Affected_Rows(),"<br />\n";
485 
486  if (!is_object($rs)) {
487  return;
488  }
489 
490  require_once ADODB_SESSION.'/../tohtml.inc.php';
491  rs2html($rs);
492  }
493 
495  // public methods
497 
498  function config($driver, $host, $user, $password, $database=false,$options=false)
499  {
502  ADODB_Session::user($user);
503  ADODB_Session::password($password);
505 
506  if ($driver == 'oci8' || $driver == 'oci8po') $options['lob'] = 'CLOB';
507 
508  if (isset($options['table'])) ADODB_Session::table($options['table']);
509  if (isset($options['lob'])) ADODB_Session::clob($options['lob']);
510  if (isset($options['debug'])) ADODB_Session::debug($options['debug']);
511  }
512 
518  function open($save_path, $session_name, $persist = null)
519  {
521 
522  if ($conn) {
523  return true;
524  }
525 
527  $debug = ADODB_Session::debug();
530  $password = ADODB_Session::password();
531  $user = ADODB_Session::user();
532 
533  if (!is_null($persist)) {
534  ADODB_Session::persist($persist);
535  } else {
536  $persist = ADODB_Session::persist();
537  }
538 
539 # these can all be defaulted to in php.ini
540 # assert('$database');
541 # assert('$driver');
542 # assert('$host');
543 
544  $conn = ADONewConnection($driver);
545 
546  if ($debug) {
547  $conn->debug = true;
548 // ADOConnection::outp( " driver=$driver user=$user pwd=$password db=$database ");
549  }
550 
551  if ($persist) {
552  switch($persist) {
553  default:
554  case 'P': $ok = $conn->PConnect($host, $user, $password, $database); break;
555  case 'C': $ok = $conn->Connect($host, $user, $password, $database); break;
556  case 'N': $ok = $conn->NConnect($host, $user, $password, $database); break;
557  }
558  } else {
559  $ok = $conn->Connect($host, $user, $password, $database);
560  }
561 
562  if ($ok) $GLOBALS['ADODB_SESS_CONN'] = $conn;
563  else
564  ADOConnection::outp('<p>Session: connection failed</p>', false);
565 
566 
567  return $ok;
568  }
569 
573  function close()
574  {
575 /*
576  $conn = ADODB_Session::_conn();
577  if ($conn) $conn->Close();
578 */
579  return true;
580  }
581 
582  /*
583  Slurp in the session variables and return the serialized string
584  */
585  function read($key)
586  {
589  $filter = ADODB_Session::filter();
590  $table = ADODB_Session::table();
591 
592  if (!$conn) {
593  return '';
594  }
595 
596  //assert('$table');
597 
598  $qkey = $conn->quote($key);
599  $binary = $conn->dataProvider === 'mysql' ? '/*! BINARY */' : '';
600 
601  $sql = "SELECT $data FROM $table WHERE sesskey = $binary $qkey AND expiry >= " . time();
602  /* Lock code does not work as it needs to hold transaction within whole page, and we don't know if
603  developer has commited elsewhere... :(
604  */
605  #if (ADODB_Session::Lock())
606  # $rs = $conn->RowLock($table, "$binary sesskey = $qkey AND expiry >= " . time(), $data);
607  #else
608 
609  $rs = $conn->Execute($sql);
610  //ADODB_Session::_dumprs($rs);
611  if ($rs) {
612  if ($rs->EOF) {
613  $v = '';
614  } else {
615  $v = reset($rs->fields);
616  $filter = array_reverse($filter);
617  foreach ($filter as $f) {
618  if (is_object($f)) {
619  $v = $f->read($v, ADODB_Session::_sessionKey());
620  }
621  }
622  $v = rawurldecode($v);
623  }
624 
625  $rs->Close();
626 
627  ADODB_Session::_crc(strlen($v) . crc32($v));
628  return $v;
629  }
630 
631  return '';
632  }
633 
639  function write($key, $val)
640  {
641  global $ADODB_SESSION_READONLY;
642 
643  if (!empty($ADODB_SESSION_READONLY)) return;
644 
645  $clob = ADODB_Session::clob();
647  $crc = ADODB_Session::_crc();
649  $debug = ADODB_Session::debug();
651  $expire_notify = ADODB_Session::expireNotify();
652  $filter = ADODB_Session::filter();
653  $lifetime = ADODB_Session::lifetime();
654  $table = ADODB_Session::table();
655 
656  if (!$conn) {
657  return false;
658  }
659  $qkey = $conn->qstr($key);
660 
661  //assert('$table');
662 
663  $expiry = time() + $lifetime;
664 
665  $binary = $conn->dataProvider === 'mysql' ? '/*! BINARY */' : '';
666 
667  // crc32 optimization since adodb 2.1
668  // now we only update expiry date, thx to sebastian thom in adodb 2.32
669  if ($crc !== false && $crc == (strlen($val) . crc32($val))) {
670  if ($debug) {
671  ADOConnection::outp( '<p>Session: Only updating date - crc32 not changed</p>');
672  }
673 
674  $expirevar = '';
675  if ($expire_notify) {
676  $var = reset($expire_notify);
677  global $$var;
678  if (isset($$var)) {
679  $expirevar = $$var;
680  }
681  }
682 
683 
684  $sql = "UPDATE $table SET expiry = ".$conn->Param('0').",expireref=".$conn->Param('1')." WHERE $binary sesskey = ".$conn->Param('2')." AND expiry >= ".$conn->Param('3');
685  $rs = $conn->Execute($sql,array($expiry,$expirevar,$key,time()));
686  return true;
687  }
688  $val = rawurlencode($val);
689  foreach ($filter as $f) {
690  if (is_object($f)) {
691  $val = $f->write($val, ADODB_Session::_sessionKey());
692  }
693  }
694 
695  $arr = array('sesskey' => $key, 'expiry' => $expiry, $data => $val, 'expireref' => '');
696  if ($expire_notify) {
697  $var = reset($expire_notify);
698  global $$var;
699  if (isset($$var)) {
700  $arr['expireref'] = $$var;
701  }
702  }
703 
704  if (!$clob) { // no lobs, simply use replace()
705  $arr[$data] = $val;
706  $rs = $conn->Replace($table, $arr, 'sesskey', $autoQuote = true);
707 
708  } else {
709  // what value shall we insert/update for lob row?
710  switch ($driver) {
711  // empty_clob or empty_lob for oracle dbs
712  case 'oracle':
713  case 'oci8':
714  case 'oci8po':
715  case 'oci805':
716  $lob_value = sprintf('empty_%s()', strtolower($clob));
717  break;
718 
719  // null for all other
720  default:
721  $lob_value = 'null';
722  break;
723  }
724 
725  $conn->StartTrans();
726  $expiryref = $conn->qstr($arr['expireref']);
727  // do we insert or update? => as for sesskey
728  $rs = $conn->Execute("SELECT COUNT(*) AS cnt FROM $table WHERE $binary sesskey = $qkey");
729  if ($rs && reset($rs->fields) > 0) {
730  $sql = "UPDATE $table SET expiry = $expiry, $data = $lob_value, expireref=$expiryref WHERE sesskey = $qkey";
731  } else {
732  $sql = "INSERT INTO $table (expiry, $data, sesskey,expireref) VALUES ($expiry, $lob_value, $qkey,$expiryref)";
733  }
734  if ($rs)$rs->Close();
735 
736 
737  $err = '';
738  $rs1 = $conn->Execute($sql);
739  if (!$rs1) $err = $conn->ErrorMsg()."\n";
740 
741  $rs2 = $conn->UpdateBlob($table, $data, $val, " sesskey=$qkey", strtoupper($clob));
742  if (!$rs2) $err .= $conn->ErrorMsg()."\n";
743 
744  $rs = ($rs && $rs2) ? true : false;
745  $conn->CompleteTrans();
746  }
747 
748  if (!$rs) {
749  ADOConnection::outp('<p>Session Replace: ' . $conn->ErrorMsg() . '</p>', false);
750  return false;
751  } else {
752  // bug in access driver (could be odbc?) means that info is not committed
753  // properly unless select statement executed in Win2000
754  if ($conn->databaseType == 'access') {
755  $sql = "SELECT sesskey FROM $table WHERE $binary sesskey = $qkey";
756  $rs = $conn->Execute($sql);
758  if ($rs) {
759  $rs->Close();
760  }
761  }
762  }/*
763  if (ADODB_Session::Lock()) {
764  $conn->CommitTrans();
765  }*/
766  return $rs ? true : false;
767  }
768 
771  function destroy($key) {
773  $table = ADODB_Session::table();
774  $expire_notify = ADODB_Session::expireNotify();
775 
776  if (!$conn) {
777  return false;
778  }
779 
780  //assert('$table');
781 
782  $qkey = $conn->quote($key);
783  $binary = $conn->dataProvider === 'mysql' ? '/*! BINARY */' : '';
784 
785  if ($expire_notify) {
786  reset($expire_notify);
787  $fn = next($expire_notify);
788  $savem = $conn->SetFetchMode(ADODB_FETCH_NUM);
789  $sql = "SELECT expireref, sesskey FROM $table WHERE $binary sesskey = $qkey";
790  $rs = $conn->Execute($sql);
792  $conn->SetFetchMode($savem);
793  if (!$rs) {
794  return false;
795  }
796  if (!$rs->EOF) {
797  $ref = $rs->fields[0];
798  $key = $rs->fields[1];
799  //assert('$ref');
800  //assert('$key');
801  $fn($ref, $key);
802  }
803  $rs->Close();
804  }
805 
806  $sql = "DELETE FROM $table WHERE $binary sesskey = $qkey";
807  $rs = $conn->Execute($sql);
809 
810  return $rs ? true : false;
811  }
812 
815  function gc($maxlifetime)
816  {
818  $debug = ADODB_Session::debug();
819  $expire_notify = ADODB_Session::expireNotify();
820  $optimize = ADODB_Session::optimize();
821  $sync_seconds = ADODB_Session::syncSeconds();
822  $table = ADODB_Session::table();
823 
824  if (!$conn) {
825  return false;
826  }
827 
828 
829  $time = time();
830  $binary = $conn->dataProvider === 'mysql' ? '/*! BINARY */' : '';
831 
832  if ($expire_notify) {
833  reset($expire_notify);
834  $fn = next($expire_notify);
835  $savem = $conn->SetFetchMode(ADODB_FETCH_NUM);
836  $sql = "SELECT expireref, sesskey FROM $table WHERE expiry < $time";
837  $rs = $conn->Execute($sql);
839  $conn->SetFetchMode($savem);
840  if ($rs) {
841  $conn->StartTrans();
842  $keys = array();
843  while (!$rs->EOF) {
844  $ref = $rs->fields[0];
845  $key = $rs->fields[1];
846  $fn($ref, $key);
847  $del = $conn->Execute("DELETE FROM $table WHERE sesskey=".$conn->Param('0'),array($key));
848  $rs->MoveNext();
849  }
850  $rs->Close();
851 
852  $conn->CompleteTrans();
853  }
854  } else {
855 
856  if (1) {
857  $sql = "SELECT sesskey FROM $table WHERE expiry < $time";
858  $arr = $conn->GetAll($sql);
859  foreach ($arr as $row) {
860  $sql2 = "DELETE FROM $table WHERE sesskey=".$conn->Param('0');
861  $conn->Execute($sql2,array(reset($row)));
862  }
863  } else {
864  $sql = "DELETE FROM $table WHERE expiry < $time";
865  $rs = $conn->Execute($sql);
867  if ($rs) $rs->Close();
868  }
869  if ($debug) {
870  ADOConnection::outp("<p><b>Garbage Collection</b>: $sql</p>");
871  }
872  }
873 
874  // suggested by Cameron, "GaM3R" <gamr@outworld.cx>
875  if ($optimize) {
877 
878  if (preg_match('/mysql/i', $driver)) {
879  $sql = "OPTIMIZE TABLE $table";
880  }
881  if (preg_match('/postgres/i', $driver)) {
882  $sql = "VACUUM $table";
883  }
884  if (!empty($sql)) {
885  $conn->Execute($sql);
886  }
887  }
888 
889  if ($sync_seconds) {
890  $sql = 'SELECT ';
891  if ($conn->dataProvider === 'oci8') {
892  $sql .= "TO_CHAR({$conn->sysTimeStamp}, 'RRRR-MM-DD HH24:MI:SS')";
893  } else {
894  $sql .= $conn->sysTimeStamp;
895  }
896  $sql .= " FROM $table";
897 
898  $rs = $conn->SelectLimit($sql, 1);
899  if ($rs && !$rs->EOF) {
900  $dbts = reset($rs->fields);
901  $rs->Close();
902  $dbt = $conn->UnixTimeStamp($dbts);
903  $t = time();
904 
905  if (abs($dbt - $t) >= $sync_seconds) {
906  $msg = __FILE__ .
907  ": Server time for webserver {$_SERVER['HTTP_HOST']} not in synch with database: " .
908  " database=$dbt ($dbts), webserver=$t (diff=". (abs($dbt - $t) / 60) . ' minutes)';
909  error_log($msg);
910  if ($debug) {
911  ADOConnection::outp("<p>$msg</p>");
912  }
913  }
914  }
915  }
916 
917  return true;
918  }
919 }
920 
922 if (empty($ADODB_SESSION_READONLY))
923  register_shutdown_function('session_write_close');
924 
925 // for backwards compatability only
926 function adodb_sess_open($save_path, $session_name, $persist = true) {
927  return ADODB_Session::open($save_path, $session_name, $persist);
928 }
929 
930 // for backwards compatability only
931 function adodb_sess_gc($t)
932 {
933  return ADODB_Session::gc($t);
934 }
debug($debug=null)
adodb_unserialize( $serialized_string)
const ADODB_SESSION
adodb_session_create_table($schemaFile=null, $conn=null)
table($table=null)
dataFieldName($data_field_name=null)
encryptionKey($encryption_key=null)
optimize($optimize=null)
filter($filter=null)
$database
Definition: server.php:40
adodb_sess_gc($t)
adodb_sess_open($save_path, $session_name, $persist=true)
host($host=null)
if(isset($_REQUEST['nrows'])) else $rs
Definition: server.php:94
adodb_session_regenerate_id()
password($password=null)
persist($persist=null)
lifetime($lifetime=null)
$conn
Definition: server.php:81
config($driver, $host, $user, $password, $database=false, $options=false)
database($database=null)
gc($maxlifetime)
_conn($conn=null)
_crc($crc=null)
clob($clob=null)
rs2html(&$rs, $ztabhtml=false, $zheaderarray=false, $htmlspecialchars=true, $echo=true)
Definition: tohtml.inc.php:43
$driver
Definition: server.php:36
user($user=null)
write($key, $val)
driver($driver=null)
open($save_path, $session_name, $persist=null)
$host
Definition: server.php:37
if(TYPO3_MODE==='BE') $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tsfebeuserauth.php']['frontendEditingController']['default']
$sql
Definition: server.php:84
expireNotify($expire_notify=null)
syncSeconds($sync_seconds=null)