【发布时间】:2013-03-10 09:05:31
【问题描述】:
我们的网络应用程序(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 页面)时基于HttpContext.Current.Profile.UserName 在VirtualWepApp1, 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
其他解决方案是将所有应用程序放在同一个应用程序池下,但这 - 由于其他一些编码困难 - 是不行的。
问题:有没有简单的方法从所有应用程序(主要和虚拟)中清除会话/注销用户?
--
附言。我继承了虚拟应用程序的这种结构/架构。
【问题讨论】:
-
我认为不可能从一个地方清除所有应用程序池中的会话。这实际上是预期的行为。主要原因是安全性 - 从其他应用程序池修改应用程序池状态的能力将为各种攻击打开大门,尤其是在多租户托管环境中。
标签: asp.net session iis logout application-pool