如何清除主web应用程序和虚拟子应用程序中的会话?(ASP.NET)

如何清除主web应用程序和虚拟子应用程序中的会话?(ASP.NET),asp.net,session,iis,logout,application-pool,Asp.net,Session,Iis,Logout,Application Pool,我们的web应用程序(asp.net 4.0)在IIS(7.5/8.0) 单一登录页面位于MainWebApp中。用户相关数据存储在会话中,并在用户访问这些虚拟应用程序下的资产(.net页面)时,基于HttpContext.Current.Profile.UserName在virtualwebapp1、virtualwebapp2、virtualwebapp3中重新创建。我们面临的问题是,如果用户通过MainWebApp/logout页面,他/她没有完全从系统注销 我所做的工作是: - crea

我们的web应用程序
(asp.net 4.0)
IIS(7.5/8.0)

单一登录页面位于
MainWebApp
中。用户相关数据存储在会话中,并在用户访问这些虚拟应用程序下的资产(.net页面)时,基于
HttpContext.Current.Profile.UserName
virtualwebapp1、virtualwebapp2、virtualwebapp3
中重新创建。我们面临的问题是,如果用户通过
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。我继承了虚拟应用程序的这种结构/架构

应用程序池的主要目标是(除其他外)隔离您的应用程序,因此可能的(推荐的解决方案)是向每个应用程序发出信号,以执行所需的注销:

System.Web.Security.FormsAuthentication.SignOut();
怎么做

创建一个安全保证(限制其访问调用方允许的主机/ip或/并在请求中使用加密密钥),当调用该保证时,将注销当前应用程序上的用户

然后,当您在其中一个应用程序上注销时,您可以为剩余的应用程序注销处理程序包含一个调用(信号),以传递用户信息(密钥等)


答案也可能适用于您的需要。

因为我假设不可能从一个位置清除所有应用程序池中的会话。这实际上是预期的行为。主要原因是安全性—从其他应用程序池修改应用程序池状态的能力将为各种攻击打开大门,特别是在多租户托管环境中。
System.Web.Security.FormsAuthentication.SignOut();