【问题标题】:How to clear session in main web application and virtual sub applications? (ASP.NET)如何清除主 Web 应用程序和虚拟子应用程序中的会话? (ASP.NET)
【发布时间】: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.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 

其他解决方案是将所有应用程序放在同一个应用程序池下,但这 - 由于其他一些编码困难 - 是不行的。

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

--
附言。我继承了虚拟应用程序的这种结构/架构。

【问题讨论】:

  • 我认为不可能从一个地方清除所有应用程序池中的会话。这实际上是预期的行为。主要原因是安全性 - 从其他应用程序池修改应用程序池状态的能力将为各种攻击打开大门,尤其是在多租户托管环境中。

标签: asp.net session iis logout application-pool


【解决方案1】:

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

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

怎么样?

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

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

This 的回答也可能适用于您的需求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 2013-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多