如何使用脚本终止CAS会话?

时间:2012-04-18 18:42:50

标签: php cas phpcas

我们使用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),以允许此功能发生?

1 个答案:

答案 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);
}

这种方法的负面影响包括:

  • 您没有看到CAS服务器的成功响应。
  • 将向控制台记录一条警告,指出从脚本标记返回HTML。