7

我正在尝试帮助一个朋友 - 他们有一个相当大的 Web 应用程序(ASP.NET 4.0,Visual Basic),它有许多子文件夹,它们都充当准子应用程序(但它们只是主应用程序的子文件夹)。该应用程序将被拆分为多个独立的 Web 应用程序,因为在其当前形式下,很难进一步维护和开发。

问题是当前的单体应用程序使用许多会话变量来存储用户信息(登录后等)会话)。会话状态存储在 SQL Server 中。当前 Web 应用程序的用户都是外部用户,并非所有用户都可以访问所有“子应用程序”。

我正在寻找关于这两件事的一些建议:

1. 我已经做了一些搜索,发现单点登录 - 这似乎解决了跨这些应用程序的身份验证问题,但我不熟悉它,我不明白如果“会话”如何删除身份验证信息过期,因为不同的 Web 应用程序将有不同的会话。一旦会话在其中一个中过期,是否可以从所有 Web 应用程序中注销用户?

2.我怀疑(但不确定)在拆分后可能需要共享的身份验证信息之上可能还有一些其他会话数据。最好的方法是什么(再次可靠和安全)?

我发现这篇关于传递 ID的文章(传递给将保存共享数据的数据库记录)并想知道它是否好。

所有建议将不胜感激。

PS:我在 SO 上找到了许多关于此的主题,但我不相信他们中的任何一个都回答了这些具体问题。我发现最有帮助的是这个:

在 ASP.NET 应用程序之间共享数据

4

2 回答 2

13

最终我找到了解决这个问题的方法,我把它留在这里作为其他人的参考:

StateServer 使用 Windows 服务(ASP.NET 状态服务)来处理内存中的会话。这使用 MachineKey、AppDomainAppID 以及 SessionID 来唯一标识应用程序。

  • 在 web.config 中将相同的 MachineKey 设置为站点下的所有应用程序都相同。
  • 在 Global.asax Init() 中添加代码以将所有应用程序的 AppDomainAppID 设置为相同。
  • 实现 ISessionIDManager 并返回自定义 Session ID 以在子应用程序中重复使用。

以下链接为我所做的实际实现提供了信息:

于 2012-07-29T13:41:24.960 回答
3

可以在不同的应用程序之间共享 ASP.NET 会话。显然,共享相同会话状态数据库的所有应用程序都需要在相同版本的 ASP.NET 上(或者在会话状态数据库兼容的版本上)。此外,所有共享应用程序都需要在如何维护会话状态中的信息方面保持协调。例如,会话变量需要在应用程序之间维护兼容的信息和含义。

于 2012-06-30T23:50:07.847 回答