function LogoutNotification($SessionID) { global $CFG, $SESSION, $DB; // Delete session of user using $SessionID if (empty($CFG->dbsessions)) { // File session $dir = $CFG->dataroot . '/sessions'; if (is_dir($dir)) { if ($dh = opendir($dir)) { // Read all session files while (($file = readdir($dh)) !== false) { // Check if it is a file if (is_file($dir . '/' . $file)) { $session_key = preg_replace('/sess_/', '', $file); // Read session file data $data = file($dir . '/' . $file); if (isset($data[0])) { $user_session = unserializesession($data[0]); // Check if we have found session that shall be deleted if (isset($user_session['SESSION']) && isset($user_session['SESSION']->shibboleth_session_id)) { // If there is a match, delete file if ($user_session['SESSION']->shibboleth_session_id == $SessionID) { // Delete session file if (!unlink($dir . '/' . $file)) { return new SoapFault('LogoutError', 'Could not delete Moodle session file.'); } } } } } } closedir($dh); } } } else { // DB Session //TODO: this needs to be rewritten to use new session stuff if (!empty($CFG->sessiontimeout)) { $ADODB_SESS_LIFE = $CFG->sessiontimeout; } if ($user_session_data = $DB->get_records_sql('SELECT sesskey, sessdata FROM {sessions2} WHERE expiry > NOW()')) { foreach ($user_session_data as $session_data) { // Get user session $user_session = adodb_unserialize(urldecode($session_data->sessdata)); if (isset($user_session['SESSION']) && isset($user_session['SESSION']->shibboleth_session_id)) { // If there is a match, delete file if ($user_session['SESSION']->shibboleth_session_id == $SessionID) { // Delete this session entry if (ADODB_Session::destroy($session_data->sesskey) !== true) { return new SoapFault('LogoutError', 'Could not delete Moodle session entry in database.'); } } } } } } // If now SoapFault was thrown the function will return OK as the SP assumes }
function NotifyExpire($ref, $key) { print "<p><b>Notify Expiring={$ref}, sessionkey={$key}</b></p>"; } $ADODB_SESSION_DRIVER = 'mysql'; $ADODB_SESSION_CONNECT = 'localhost'; $ADODB_SESSION_USER = '******'; $ADODB_SESSION_PWD = ''; $ADODB_SESSION_DB = 'pos'; $ADODB_SESS_LIFE = 120; //$ADODB_SESS_DEBUG = true; $USER = '******'; $ADODB_SESSION_EXPIRE_NOTIFY = array('USER', 'NotifyExpire'); error_reporting(E_ALL); include 'session/adodb-cryptsession.php'; session_start(); print "session id <br>"; print session_id() . "<br>"; if (ADODB_Session::read(session_id()) == '') { ADODB_Session::destroy(session_id()); //ADODB_Session::gc(160); //unset($_COOKIE['PHPSESSID']); //unset($_SESSION); //session_destroy(); //session_unset(); print "session info is empty <br>"; } print ADODB_Session::read(session_id()) . "<br>"; print date("F j, Y, g:i a s", 1095289294) . "<br>"; print date("F j, Y, g:i a s", 1095289337); ob_end_flush();