Как мне убить сеанс 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 возвращается из тега скрипта.