【问题标题】:Classic Asp session state lost when navigating from .aspx to .asp page从 .aspx 导航到 .asp 页面时,经典 Asp 会话状态丢失
【发布时间】:2014-09-20 15:09:11
【问题描述】:

我们有一个混合了Classic AspASP.NET 的旧应用程序。这个旧版应用程序位于我们主 ASP.NET 网站的子文件夹中。需要明确的是,在这个子文件夹中混合了 .asp 和 .aspx 页面。

我们不共享会话,但是当从 .asp 导航到 .aspx 页面时,我们会在正文中发布足够的信息以在 ASP.NET 中设置会话。

如果用户导航回 .asp 页面,则用户会话仍然存在,并且在单个 Web 服务器上一切正常。

我们在两台网络服务器上测试load balancing,设置如下。

ASP.NET 不使用关联,因此由负载平衡器决定使用哪个 Web 服务器。旧版应用程序位于子文件夹中,该子文件夹具有单一关联。两个 Web 服务器在 web.config 中具有相同的机器密钥设置。 ASP.NET 应用程序的会话状态存储在数据库中。

问题是从 .aspx 导航回 .asp 时,Classic Asp 会话丢失。我想知道为什么?

注意。单一关联 - 粘性会话适用于旧文件夹,我已经使用 IIS 日志检查了这一点。因此,对 legacy 文件夹的所有请求将始终路由到同一个 Web 服务器。

【问题讨论】:

    标签: asp.net asp-classic load-balancing


    【解决方案1】:

    经典 ASP 不支持负载平衡方案中跨服务器的会话。使用 ASP.NET 术语(松散地),ASP Clasic 会话支持的唯一 modes 是 InProcOff

    如果您希望会话在负载平衡的情况下工作,您要么必须将负载平衡器配置为使用“粘性会话/关联性”,要么滚动您自己的由数据库或其他东西支持的自定义会话管理(这很难在不造成安全漏洞的情况下正确处理)。

    阅读材料:http://msdn.microsoft.com/en-us/library/ms972338.aspx

    【讨论】:

    • 我明白这一点,这就是为什么要为旧文件夹设置关联性,以便所有请求都根据 IP 路由到同一服务器。
    • 啊,我明白了。我看到负载均衡器实现亲和力的方式是它们在响应中添加标头或 cookie;负载均衡器使用该标签来跟踪在获得下一个请求时使用哪个服务器。我的猜测是,当您访问 ASP.NET 页面时,负载均衡器会删除标头/cookie(因为会话不再是仿射的,所以它必须停止跟踪)。您可以使用 Fiddler 或类似工具来检查负载均衡器标头/cookie,并验证这个想法吗?如果这是正确的,请咨询您的负载平衡器供应商,看看他们是否有任何解决方法。
    • 负载均衡器正在使用 IP 或更确切地说是 IP 的前 3 个八位字节将流量路由到同一台服务器。旧版应用程序的 ASP.NET 页面与经典 asp 页面位于同一文件夹中,因此仍需要关联性。我已经使用 IIS 日志确认所有对旧文件夹、asp 或 aspx 的请求都在访问同一台服务器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-14
    相关资源
    最近更新 更多