在ASP.NET Web应用程序之间传递会话数据

时间:2012-06-30 23:42:37

标签: asp.net sql-server session vb.net-2010

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

问题是当前的单片应用程序使用了许多会话变量来处理用户信息(登录后等)。我想知道是否有一种简单的方法可以在未来的多个Web应用程序之间安全地共享这些信息(这将是显然有独立的会议)。会话状态存储在SQL Server中。当前Web应用程序的用户都是外部用户,并非所有用户都可以访问所有“子应用程序”。

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

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

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

我找到this article about passing IDs(对于保存共享数据的数据库记录),并想知道它是否合适。

我们将不胜感激。

PS:我在这里发现了很多线索,但我不相信他们中的任何一个都回答了这些具体问题。我找到的最有帮助的就是这个:

Sharing data between ASP.NET applications

2 个答案:

答案 0 :(得分:13)

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

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

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

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

答案 1 :(得分:3)

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