ASP失去了两页之间的会话

时间:2013-01-16 08:46:05

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

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

基本上,应用程序的工作原理如下:

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

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

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

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

更重要的是它到目前为止还没有系统化:问题经常发生,但绝对不是所有时间。当它启动时,用户必须先登录2到3次才能通过。如果应用程序被回收,它通常会解决问题一段时间,尽管这不是系统性的,甚至不一定是必要的。

任何人都知道这里会发生什么?

编辑:一些额外信息:

  • ASP会话处理已激活
  • 代码的任何部分都没有被静默抑制。如果它们发生在COM对象可以捕获它们的地方或者用户,则它们将转到日志文件。
  • 在COM对象日志文件,IIS日志或服务器的事件日志中看不到任何错误。
  • 使用ProcMon跟踪流程活动并没有发现任何特殊内容。
  • 查看COM对象日志文件,我清楚地看到正在创建的COM对象实例," LoginUser"方法从登录页面调用并成功返回,然后调用第一个应用程序页面,并检查存储在会话中的对象是否存在失败。
  • 有一个Web服务器,没有服务器场。

2 个答案:

答案 0 :(得分:2)

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

编辑:还有一件事。当我使用ASP和MS Access时,我常常看到这样的错误,并且永远无法解决这个问题。

答案 1 :(得分:0)

作为调试练习,我很想从ASP Session事件中记录信息,包括会话OnStart,OnEnd和abandon。也许尝试从请求中获取尽可能多的信息,然后计算会话的给定生命周期/页面流,然后确定会话结束或放弃时是否存在任何共同点。

此外,在查找Session_OnEnd事件时,我发现了一篇文章,表明它在IIS 7.0中表现得非常奇怪。请参阅http://blogs.iis.net/lprete/archive/2009/01/04/session-onend-classic-asp-and-iis-7-0.aspx以防万一这可能有用。

祝你好运。