在 IIS 7.5 和 Windows 2008 R2 64 位上与 Classic ASP 进行混合会话

在 IIS 7.5 和 Windows 2008 R2 64 位上与 Classic ASP 进行混合会话

最近在将服务器从 Windows 2003 上的 IIS 6 升级到 Windows 2008 R2 64 位上的 IIS 7.5 时遇到了问题。

我们有许多网站在 Classic ASP 上运行。所有网站都位于特定站点下,例如 www.example.com/foo 和 www.example.com/foobar。

在 IIS 6 上,每个站点都设置为虚拟目录,一切运行正常。自从迁移到新设置后,很多网站似乎都存在混合会话。需要明确的是,这不是应用程序池回收问题;而是当用户访问站点时,会话中会填充信息,并且在浏览时,他们会从不同的站点获取会话。

我们根据以下情况确定了这一点 - 一些客户打电话报告说,他们的购物车中有来自不同网站的商品 - 而且我们自己的测试表明,正在运行的某些查询会尝试从不同的网站获取产品

我们已经尝试过 - 禁用动态缓存 - 将每个站点转换为虚拟应用程序(如果我理解正确的话,虚拟目录/应用程序概念在 IIS 7 中有所改变/改进,尽管说实话,我不清楚有什么区别) - 各种应用程序池更改(使用 .NET 2 框架)、经典和集成模式、将 Process 模型更改为 NetworkIdentity),但都无济于事。

我们唯一还没有尝试过的是将其更改为作为 32 位应用程序运行。

我们不使用仅 http 的 cookie,因此当我打开浏览器并输入

文档 Cookie

在 Firefox/Chrome/IE 中的开发控制台中,将会有多个 ASPSESSIONID=... 值,而以前我相信只有一个。

最后,我们对经典的 ASP 页面使用服务器端 JScript,而不是 VBScript,因此我们有类似下面的代码。

//用户的登录账户作为 jscript 对象 Session("user") = { email : "[电子邮件保护]", 编号 : 123 };

如果我们执行如下代码行:

Response.Write( typeof(Session("用户")) );

当一切正常运行时,我们会得到“对象”——正如预期的那样。当会话被破坏时,输出为“未知”,我们也无法访问 JScript 对象内的字段(例如 .email 或 .id 字段)。

如果有人能提供关于如何解决这个问题的指点,我将不胜感激,谷歌上的所有内容似乎都指向不同的问题。

答案1

这听起来仍然很像应用程序池/回收问题。您确定您确实在 IIS6 下使用了 ASPSESSIONID cookie 吗?或者是否存在具有自己的 cookie 的自定义会话管理解决方案?

相关内容