Ejemplo n.º 1
0
 public static function getLoggedInUsers()
 {
     $items = self::getAll();
     if (count($items) == 0) {
         return array();
     }
     $users = array();
     foreach ($items as $item) {
         $data = adodb_unserialize(urldecode($item['sessdata']));
         if ($data[self::PREFIX . 'user_id'] > 0) {
             $users[] = array('user_id' => $data[self::PREFIX . 'user_id'], 'user_name' => $data[self::PREFIX . 'user_name'], 'user_email' => $data[self::PREFIX . 'user_email'], 'user_realname' => $data[self::PREFIX . 'user_realname'], 'user_logon' => $item['created']);
         }
     }
     return $users;
 }
Ejemplo n.º 2
0
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
}