Ejemplo n.º 1
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
}
Ejemplo n.º 2
0
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();