61 include_once(
'crypt.inc.php');
63 if (!defined(
'_ADODB_LAYER')) {
64 include (dirname(__FILE__).
'/adodb.inc.php');
68 define(
'ADODB_SESSION_SYNCH_SECS',60);
70 if (!defined(
'ADODB_SESSION')) {
72 define(
'ADODB_SESSION',1);
74 GLOBAL $ADODB_SESSION_CONNECT,
75 $ADODB_SESSION_DRIVER,
83 $ADODB_SESSION_EXPIRE_NOTIFY,
89 if (empty($ADODB_SESSION_DRIVER)) {
90 $ADODB_SESSION_DRIVER=
'mysql';
91 $ADODB_SESSION_CONNECT=
'localhost';
92 $ADODB_SESSION_USER =
'root';
93 $ADODB_SESSION_PWD =
'';
94 $ADODB_SESSION_DB =
'xphplens_2';
97 if (empty($ADODB_SESSION_TBL)){
98 $ADODB_SESSION_TBL =
'sessions';
101 if (empty($ADODB_SESSION_EXPIRE_NOTIFY)) {
102 $ADODB_SESSION_EXPIRE_NOTIFY =
false;
105 function ADODB_Session_Key()
107 $ADODB_CRYPT_KEY =
'CRYPTED ADODB SESSIONS ROCK!';
111 return crypt($ADODB_CRYPT_KEY, session_ID());
114 $ADODB_SESS_LIFE = ini_get(
'session.gc_maxlifetime');
115 if ($ADODB_SESS_LIFE <= 1) {
118 $ADODB_SESS_LIFE=1440;
123 GLOBAL $ADODB_SESSION_CONNECT,
124 $ADODB_SESSION_DRIVER,
131 $ADODB_SESS_INSERT =
false;
133 if (isset($ADODB_SESS_CONN))
return true;
135 $ADODB_SESS_CONN = ADONewConnection($ADODB_SESSION_DRIVER);
136 if (!empty($ADODB_SESS_DEBUG)) {
137 $ADODB_SESS_CONN->debug =
true;
138 print
" conn=$ADODB_SESSION_CONNECT user=$ADODB_SESSION_USER pwd=$ADODB_SESSION_PWD db=$ADODB_SESSION_DB ";
140 return $ADODB_SESS_CONN->PConnect($ADODB_SESSION_CONNECT,
141 $ADODB_SESSION_USER,$ADODB_SESSION_PWD,$ADODB_SESSION_DB);
145 function adodb_sess_close()
147 global $ADODB_SESS_CONN;
149 if ($ADODB_SESS_CONN) $ADODB_SESS_CONN->Close();
153 function adodb_sess_read($key)
156 global $ADODB_SESS_CONN,$ADODB_SESS_INSERT,$ADODB_SESSION_TBL;
157 $rs = $ADODB_SESS_CONN->Execute(
"SELECT data FROM $ADODB_SESSION_TBL WHERE sesskey = '$key' AND expiry >= " . time());
160 $ADODB_SESS_INSERT =
true;
164 $v = rawurldecode($Crypt->Decrypt(reset($rs->fields), ADODB_Session_Key()));
169 else $ADODB_SESS_INSERT =
true;
174 function adodb_sess_write($key, $val)
177 global $ADODB_SESS_INSERT,$ADODB_SESS_CONN, $ADODB_SESS_LIFE, $ADODB_SESSION_TBL,$ADODB_SESSION_EXPIRE_NOTIFY;
179 $expiry = time() + $ADODB_SESS_LIFE;
182 $val = $Crypt->
Encrypt(rawurlencode($val), ADODB_Session_Key());
184 $arr = array(
'sesskey' => $key,
'expiry' => $expiry,
'data' => $val);
185 if ($ADODB_SESSION_EXPIRE_NOTIFY) {
186 $var = reset($ADODB_SESSION_EXPIRE_NOTIFY);
188 $arr[
'expireref'] = $$var;
190 $rs = $ADODB_SESS_CONN->Replace($ADODB_SESSION_TBL,
192 'sesskey',$autoQuote =
true);
195 ADOConnection::outp(
'
196 -- Session Replace: '.$ADODB_SESS_CONN->ErrorMsg().
'</p>',
false);
201 if ($ADODB_SESS_CONN->databaseType ==
'access') $rs = $ADODB_SESS_CONN->Execute(
"select sesskey from $ADODB_SESSION_TBL WHERE sesskey='$key'");
206 function adodb_sess_destroy($key)
208 global $ADODB_SESS_CONN, $ADODB_SESSION_TBL,$ADODB_SESSION_EXPIRE_NOTIFY;
210 if ($ADODB_SESSION_EXPIRE_NOTIFY) {
211 reset($ADODB_SESSION_EXPIRE_NOTIFY);
212 $fn = next($ADODB_SESSION_EXPIRE_NOTIFY);
213 $savem = $ADODB_SESS_CONN->SetFetchMode(ADODB_FETCH_NUM);
214 $rs = $ADODB_SESS_CONN->Execute(
"SELECT expireref,sesskey FROM $ADODB_SESSION_TBL WHERE sesskey='$key'");
215 $ADODB_SESS_CONN->SetFetchMode($savem);
217 $ADODB_SESS_CONN->BeginTrans();
219 $ref = $rs->fields[0];
220 $key = $rs->fields[1];
222 $del = $ADODB_SESS_CONN->Execute(
"DELETE FROM $ADODB_SESSION_TBL WHERE sesskey='$key'");
225 $ADODB_SESS_CONN->CommitTrans();
228 $qry =
"DELETE FROM $ADODB_SESSION_TBL WHERE sesskey = '$key'";
229 $rs = $ADODB_SESS_CONN->Execute($qry);
231 return $rs ?
true :
false;
236 global $ADODB_SESS_CONN, $ADODB_SESSION_TBL,$ADODB_SESSION_EXPIRE_NOTIFY,$ADODB_SESS_DEBUG;
238 if ($ADODB_SESSION_EXPIRE_NOTIFY) {
239 reset($ADODB_SESSION_EXPIRE_NOTIFY);
240 $fn = next($ADODB_SESSION_EXPIRE_NOTIFY);
241 $savem = $ADODB_SESS_CONN->SetFetchMode(ADODB_FETCH_NUM);
243 $rs = $ADODB_SESS_CONN->Execute(
"SELECT expireref,sesskey FROM $ADODB_SESSION_TBL WHERE expiry < $t");
244 $ADODB_SESS_CONN->SetFetchMode($savem);
246 $ADODB_SESS_CONN->BeginTrans();
248 $ref = $rs->fields[0];
249 $key = $rs->fields[1];
256 $ADODB_SESS_CONN->Execute(
"DELETE FROM $ADODB_SESSION_TBL WHERE expiry < $t");
257 $ADODB_SESS_CONN->CommitTrans();
260 $qry =
"DELETE FROM $ADODB_SESSION_TBL WHERE expiry < " . time();
261 $ADODB_SESS_CONN->Execute($qry);
265 if (defined(
'ADODB_SESSION_OPTIMIZE'))
267 global $ADODB_SESSION_DRIVER;
269 switch( $ADODB_SESSION_DRIVER ) {
272 $opt_qry =
'OPTIMIZE TABLE '.$ADODB_SESSION_TBL;
276 $opt_qry =
'VACUUM '.$ADODB_SESSION_TBL;
281 if ($ADODB_SESS_CONN->dataProvider ===
'oci8') $sql =
'select TO_CHAR('.($ADODB_SESS_CONN->sysTimeStamp).
', \'RRRR-MM-DD HH24:MI:SS\') from '. $ADODB_SESSION_TBL;
282 else $sql =
'select '.$ADODB_SESS_CONN->sysTimeStamp.
' from '. $ADODB_SESSION_TBL;
284 $rs = $ADODB_SESS_CONN->SelectLimit($sql,1);
285 if ($rs && !$rs->EOF) {
287 $dbts = reset($rs->fields);
289 $dbt = $ADODB_SESS_CONN->UnixTimeStamp($dbts);
293 __FILE__.
": Server time for webserver {$_SERVER['HTTP_HOST']} not in synch with database: database=$dbt ($dbts), webserver=$t (diff=".(abs($dbt-$t)/3600).
" hrs)";
295 if ($ADODB_SESS_DEBUG) ADOConnection::outp(
"
303 session_module_name(
'user');
304 session_set_save_handler(
309 "adodb_sess_destroy",