2

私たちのWebアプリケーション(asp.net 4.0)は、IIS (7.5 / 8.0)

-MainWebApp (application pool: MainWebApp)
--VirtualWepApp1 (application pool: VirtualWepApp1)
--VirtualWepApp2 (application pool: VirtualWepApp2)
--VirtualWepApp3 (application pool: VirtualWepApp3)

シングル ログイン ページは にありますMainWebApp。ユーザー関連のデータはセッションに保存され、ユーザーがそれらの仮想アプリケーションの下のアセット (.net ページ) にアクセスするたびに、にVirtualWepApp1, VirtualWepApp2, VirtualWepApp3基づいて再作成されます。HttpContext.Current.Profile.UserNameユーザーがページを通過した場合、ユーザーがシステムから完全にログアウトされないという問題に直面していMainWebApp/logoutます。

私が行った回避策は次のとおりです。

- create logout page for every application with Session.Abandon() and System.Web.Security.FormsAuthentication.SignOut()
- the logout link goes to the VirtualWepApp3/logout
- from VirtualWepApp3/logout redirect to VirtualWepApp2/logout
- from VirtualWepApp2/logout redirect to VirtualWepApp1/logout
- from VirtualWepApp1/logout redirect to MainWebApp/logout 

他の解決策は、すべてのアプリケーションを同じアプリ プールに配置することですが、これは、他のコーディング上の問題により、ノーノーです。

質問: すべてのアプリケーション (メインおよび仮想) からセッション/ログアウト ユーザーを簡単にクリアする方法はありますか?

--
追伸。仮想アプリのこの構造/アーキテクチャを継承しました。

4

1 に答える 1

0

アプリケーション プールの主な目標は (特に) アプリケーションを分離することです。そのため、可能な (推奨される解決策) は、各アプリケーションに目的のサインアウトを実行するように通知することです。

System.Web.Security.FormsAuthentication.SignOut();

どのように?

呼び出されたときに現在のアプリケーションでユーザーをサインアウトさせるHTTP ハンドラーを作成します(呼び出し元が許可されたホスト/IP へのアクセスを制限するか、要求で暗号化されたキーを使用するセキュリティを保証します)。

次に、いずれかのアプリケーションでサインアウトするときに、ユーザー情報 (キーなど) を渡す残りのアプリケーションのログアウト ハンドラーの呼び出し (シグナル) を含めることができます。

この回答は、お客様のニーズにも当てはまる場合があります。

于 2013-06-07T08:49:32.927 に答える