0) { $qry = 'select data from sessions where sesskey = ? and expiry > ?'; $bindvars[] = $prefs['session_lifetime']; } else { $qry = 'select data from sessions where sesskey = ?'; } return TikiDb::get()->getOne($qry, $bindvars) ?: ''; } /** * @param $sesskey * @param $data * @return bool */ public function write($sesskey, $data) { global $prefs; if (TikiDb::get()->getLock($sesskey)) { $expiry = time() + ($prefs['session_lifetime'] * 60); TikiDb::get()->query('insert into sessions (sesskey, data, expiry) values( ?, ?, ? ) on duplicate key update data=values(data), expiry=values(expiry)', [$sesskey, $data, $expiry]); TikiDb::get()->releaseLock('sessions'); return true; } return false; } /** * @param $sesskey * @return bool */ public function destroy($sesskey) { $qry = 'delete from sessions where sesskey = ?'; TikiDb::get()->query($qry, [ $sesskey ]); return true; } /** * @param $maxlifetime * @return bool */ public function gc($maxlifetime) { global $prefs; if ($prefs['session_lifetime'] > 0) { $qry = 'delete from sessions where expiry < ?'; TikiDb::get()->query($qry, [ time() ]); } return true; } } $session = new Session(); session_set_save_handler( [$session, 'open'], [$session, 'close'], [$session, 'read'], [$session, 'write'], [$session, 'destroy'], [$session, 'gc'] );