我们使用CAS和phpCAS来处理PHP脚本和CAS之间的操作。对于我们更高级的Web应用程序之一,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),以允许此功能发生?
答案 0 :(得分:0)
由于同域策略,无法通过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);
}
这种方法的负面影响包括: