.net - 在两个 ASP.NET 应用程序之间共享 session ,其中一个嵌套在另一个中

标签 .net asp.net session iis-6 legacy-code

所以,在你问“你到底是什么意思,一个嵌套在另一个中?”之前,我会尽可能简单地解释它。

存在一个 .NET Web 应用程序 (A)。构建了一个补充应用程序 (B),它可以处理几个相同的核心组件。以前的咨询公司以某种方式在应用程序 A 中“安装”了应用程序 B,以便 B 可以捎带 A 的 session 。所以,像这样:

- Application A (C:\Inetpub\wwwroot\ApplicationA)
    + Application B (C:\Inetpub\wwwroot\ApplicationA\sup\ApplicationB

之前的公司留下了关于他们如何或为什么这样做的零文档,但它对他们有用。我现在的困境是:应用程序 A 已升级,导致 B 无用。我更新了 B 以运行 A 提供的新核心,但是当我完成时,另一个团队已经淘汰了以前的生产和测试服务器,我无法获得备份来查看它是如何配置的。

经过一番折腾,我能够在单个 IIS 应用程序和池中复制上面的层次结构,方法是拆分 B 的 web.config 文件并删除重复的部分——那些已经存在于 A 的 web.config 中的部分。我还将 B 的 bin 文件夹中的所有文件转储到 A 的 bin 文件夹中。

两个站点都编译并由 IIS 提供服务,但我无法使用此结构从 A 的 session 中读取任何内容。我对这个结果并不感到惊讶,但我需要找到一种解决方法。简而言之,由于 A 的创建者强加了一些疯狂的许可规则,A 在其 session 中存储了一个 sessionID,我需要使用它来获取 B 中的数据源(该 sessionID 需要传递给其核心 API 中的每个函数用户授权)。

关于为什么该功能不再起作用的任何想法(假设我已经正确复制了旧环境),或者我该如何解决它?将 session 状态迁移到 SQL 服务器不是一种选择——我无法更改有关应用程序 A 的任何内容。

我已经看了一点 A 的代码(尽可能多地使用 Reflector),我试图从 session 中检索的变量仍然存在并且正在使用中。

任何想法都会很棒!

最佳答案

由于它们是两个独立的应用程序,它们(显然)有两个不同的 session 范围。您可以在其中一个 session 中创建一个 session ,而在另一个 session 中没有 session ,并且 A 中的 session 可能在 B 中的 session 之前到期,从而迫使 A 创建一个新 session ,而 B 仍在使用旧 session 。没有任何东西可以将 A 与 B 联系起来,反之亦然,因此从逻辑上讲,它们甚至无法共享对象,因为它们之间没有有意义的关联。

简而言之 - 您不能(轻松地)在两个不同的应用程序之间直接共享 session 数据。这个问题的一个常见解决方案是通过查询字符串或 cookie 在两个应用程序之间传递一个公共(public) ID(如果它们在同一个域中),并且两者都使用该 ID 来引用它们都可以访问的数据库中的公共(public)记录。从那时起,可以通过数据库共享信息。

关于.net - 在两个 ASP.NET 应用程序之间共享 session ,其中一个嵌套在另一个中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4994802/

相关文章:

.net - 从加入域的计算机在 Azure AD 中静默进行身份验证

android - 不同 session 中 PWA 的可信 Web Activity

c# - 是否可以在更新面板之外引用链接机器人作为更新触发器?

c# - ASP.NET MVC 5 表单验证

c# - 从 Azure 计算机视觉 API 提取文本时出错

asp.net - 调试时观察 session 内容

PHP session_id 在页面之间或刷新页面时发生变化

.net - 我应该如何使用我的 .NET 解决方案构建我的 Git 存储库?

.net - 模块 "aspnetcorev2.dll"加载失败

.net - Silverlight 4 和 TCP 套接字