1

我们使用 CAS 和 phpCAS 来处理我们的 PHP 脚本和 CAS 之间的操作。对于我们更高级的 Web 应用程序之一,CAS 仅用于身份验证,而不用于会话管理。在我们的注销脚本中,我们希望终止 CAS 会话等。但是,我无法确定一种远程调用 phpCAS 以终止 CAS 会话的方法,而不会在浏览器中发生某种操作。

来自 phpCAS 文档:

phpCAS::logout()
注销后,CAS 服务器打印注销页面。

phpCAS::logoutWithRedirectService($service)
注销后,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,以允许此功能发生?

4

1 回答 1

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 正在从脚本标记返回。
于 2012-04-18T19:50:01.117 回答