1

CAS と phpCAS を使用して、PHP スクリプトと CAS の間のアクションを処理します。より高度な Web アプリケーションの 1 つでは、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 コールバックに変数が返されます。

この機能を実行できるようにするために、phpCASの有無にかかわらず、CASサーバーに強制的にセッションを終了させる方法を知っている人はいますか?

4

1 に答える 1

0

同一ドメイン ポリシーにより、非同期スクリプトとしてクライアント アプリケーションから CAS サーバーに GET または POST を介して適切な要求を行うことはできません。

回避策の 1 つは、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 に答える