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.UserNameMainWebApp/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 回答