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

Posted

技术标签:

【中文标题】在 ASP.NET Web 应用程序之间传递会话数据【英文标题】:Passing session data between ASP.NET web applications 【发布时间】:2012-07-01 23:20:19 【问题描述】:

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

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

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

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

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

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

所有建议将不胜感激。

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

Sharing data between ASP.NET applications

【问题讨论】:

所有应用程序在同一个域还是不同的域? 我认为他们都将在同一个域上。目前它只是一个应用程序,我相信他们计划在同一个域上进行拆分。 我也在寻找在同域下的应用程序之间共享会话ID。 【参考方案1】:

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

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

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

以下链接提供了我实际执行的信息:

Sharing session state over multiple applications Maintain the same session ID over multiple applications using state server Sharing sessions over applications

【讨论】:

您好,当我拥有一个 ASP.NET 4.5 网站和其他 ASP.NET 5/MVC 6 网站时,此解决方案是否有效?我迫切需要与我正在添加的新网站相同的会话 ID。这将帮助我查询数据库中可用的大量详细信息。 @Wayofhope 我不知道答案(我没有使用 MVC 5/6),但我想这会起作用(尽管我可能错了)。我建议你试一试。如果它确实有效,如果您在此处为未来的读者留下评论,我将不胜感激。【参考方案2】:

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

【讨论】:

以上是关于在 ASP.NET Web 应用程序之间传递会话数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP.NET 中跨多个 Web 应用程序维护相同的会话 ID

使用 ASP.NET 会话状态服务跨应用程序共享会话

将 ASP.NET 会话传递给 jQuery

在 javascript/typescript 前端和 ASP.net Core 5 后端之间传递日期对象的正确方法

七天学会ASP.NET MVC ——ASP.NET MVC 数据传递

电话间隙 HTML 应用程序可以与 asp.net Mvc Web 服务器建立会话吗