Как мне убить сеанс CAS, используя скрипт?

Мы используем CAS и phpCAS для обработки действий между нашими PHP-скриптами и CAS. Для одного из наших более продвинутых веб-приложений CAS используется только для аутентификации, а не для управления сеансами. Во время нашего сценария выхода из системы мы хотим, среди прочего, завершить сеанс CAS. Однако я не могу определить способ удаленного вызова phpCAS для завершения сеанса CAS без каких-либо действий, выполняемых в браузере.

Из документации phpCAS:

phpCAS:: выход из системы ()
После выхода из системы сервер CAS распечатывает страницу выхода из системы.

phpCAS:: logoutWithRedirectService ($ обслуживание)
После выхода из системы сервер CAS перенаправляет браузер на указанный URL-адрес.

Опция № 1 перенаправляет на страницу выхода из CAS. Вариант № 2 перенаправляет на указанный URL-адрес. Нам нужен вариант, который не делает ни того, ни другого.

Рассмотрим этот фрагмент кода:

//Kill the CAS session
phpCAS::logout();

//Kill the cookie
setcookie("our-cookie");

//Unset hash in the database
$result = pg_query($connection, "UPDATE table SET field = null WHERE field = '".pg_escape_string($var)."'");

Действие phpCAS по умолчанию для перенаправления браузера куда-то нарушает эту функцию. Этот сценарий никогда не должен перенаправлять браузер, будет вызываться асинхронно, а возвращаемый результат отправит переменную обратно в обратный вызов ExtJS, который изменяет текущее представление.

Кто-нибудь знает, как я могу заставить сервер CAS завершить сеанс с или без phpCAS, чтобы эта функция имела место?

1 ответ

Решение

Из-за политики того же домена, невозможно сделать правильный запрос через GET или POST на ваш сервер CAS из клиентского приложения в виде асинхронного сценария.

Одним из обходных путей будет включение выхода из CAS в качестве объекта сценария (аналогично междоменным запросам JSONP):

function logout()
{
    var head = document.getElementsByTagName('head')[0];
    var script = document.createElement('script');
    script.src = 'https://cas.company.com/logout';
    script.type = 'text/javascript';
    head.appendChild(script);
}

Минусы этого подхода включают в себя:

  • Вы не видите успешный ответ от сервера CAS.
  • В консоль будет записано предупреждение о том, что HTML возвращается из тега скрипта.
Другие вопросы по тегам