2013-03-21 19 views
2

我们的Web应用程序(asp.net 4.0)IIS (7.5/8.0)如何清除主Web应用程序和虚拟子应用程序中的会话? (ASP.NET)

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

单一登录页面位于MainWebApp以下结构。用户相关的数据被存储在会话并且每当用户访问那些虚拟应用程序下资产(.NET页)在基于所述HttpContext.Current.Profile.UserNameVirtualWepApp1, VirtualWepApp2, VirtualWepApp3重新创建。问题,我们正面临着用户没有完全从系统中注销,如果他/她穿过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 

其他的解决办法是把所有应用程序相同的应用程序池下,但是这 - 由于一些其他编码的困难 - 没有,没有。

问题:有没有简单的方法来清除会话/注销用户从所有应用程序(主要和虚拟)?

-
PS。我已经继承了这种虚拟应用程序的结构/体系结构。

+1

正如我以为这是不可能的从一个地方清除所有应用程序池的会话。这实际上是预期的行为。主要原因在于安全性 - 从其他应用程序池修改应用程序池状态的能力将为各种攻击打开大门,特别是在多租户托管环境中。 – itGru 2013-04-24 15:56:57

回答

0

应用程序池的主要目标是(等等)到您的应用程序隔离,从而可能的(推荐的解决方案)将信号的每个应用程序执行所期望的注销:

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

如何?

创建一个HTTP Handler(保证安全限制它访问调用者允许的主机/ IP或/和在请求上使用加密的密钥),在当前应用程序中调用签名时禁用该用户。

然后当你登出你可以包括剩余的应用程序的调用(信号)的一个应用程序注销处理程序传递用户信息(密钥等)。

This答案也适用于您的需求。

相关问题