asp-classic - ASP 在两个页面之间丢失 session

标签 asp-classic windows-server-2008-r2

当客户从 Windows 2003 升级到 2008R2 时,我不得不为客户更新旧的 ASP+COM 应用程序。该过程虽然不是 100% 无痛,但却是成功的,但仍然存在一个问题:应用程序似乎随机丢失了 session 状态,或者至少丢失了我保存 session 的 COM 对象的 session 变量。

基本上,应用程序是这样工作的:

登录表单页面 -> 登录页面(在那里创建对象并保存在 Session("MyObject") 中,检查用户凭据 -> 第一个实际应用程序页面(在代码顶部检查 Session("MyObject") ).

第二次重定向仅在凭据正确但始终创建​​对象时才会发生。

但是,用户报告说他们在输入凭据后经常被重定向到登录表单页面。

经过一些调查,应用程序似乎正确地通过了登录页面,创建了 COM 对象的实例并重定向到第一个应用程序页面。在那里, session 变量再次为空,因此用户被送回登录表单。

更重要的是,它到目前为止还不是系统性的:问题发生得相当频繁,但绝对不是一直发生。启动时,用户必须登录2或3次才能通过。如果应用程序被回收,它通常可以解决问题一段时间,尽管这不是系统性的,甚至并不总是必要的。

有人知道这里会发生什么吗?

编辑:一些额外的信息:

  • ASP session 处理处于事件状态
  • 代码的任何部分都不会默默地抑制错误。如果它们发生在 COM 对象可以捕获它们或用户可以捕获它们的地方,它们将转到日志文件。
  • 在 COM 对象日志文件、IIS 日志或服务器的事件日志中都看不到错误。
  • 使用 ProcMon 跟踪进程事件没有发现任何特殊情况。
  • 查看 COM 对象日志文件,我清楚地看到正在创建 COM 对象实例,从登录页面调用“LoginUser”方法并成功返回,然后调用第一个应用程序页面并检查是否存在存储在 session 中的对象失败。
  • 只有一个网络服务器,没有服务器群。

最佳答案

我确实有一个 asp 网站,它过去做的事情完全一样。您需要检查日志文件并查看此应用程序或网站是否在其自己的专用应用程序池上运行,以及应用程序池是否由于错误代码而未被自动回收。如果正在创建 session 然后删除,则将初始 session 值传递给另一个 session - 比如说 Session("MyObject2") 并在主页中检查它。如果用户仍然注销,那么我确信应用程序池由于太多故障(例如重定向无限循环或其他原因)而被回收。

编辑:还有一件事。在将 ASP 与 MS Access 结合使用时,我经常看到此类错误,但始终无法解决。

关于asp-classic - ASP 在两个页面之间丢失 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14354293/

相关文章:

csv - 经典 ASP - 如何使用 UTF-8 将数据保存到 CSV 文件

数据网格和经典 ASP

iis - 将整个经典 ASP 网站重定向到新域的最佳方法是什么?

ssl - 在 IIS7 Windows server 2008R2 上运行多个具有相同 ip 和端口的网站

c# - 为什么 nservicebus 忽略我的订阅消息?

tcp - 如何阻止 Windows 对无法识别的 SYN-ACK 数据包进行 TCP 重置?

asp.net - 经典 ASP 和 ASP.Net 身份验证

asp.net - asp.net 设置是否影响经典 asp(IIS 6 设置)

windows - Windows 7 和 Windows Server 2008 R2 之间的区别

windows - 查询过去两周的windows事件日志