会话在经典asp站点的新请求中丢失

时间:2010-09-13 16:26:39

标签: session asp-classic

这不容易解释,但我会尽我所能。

问题已经发生在几年前使用经典asp构建的网站中,症状是管理员使用表单登录然后设置了会话变量,但是当他们请求新页面时他们很友好再次提示登录。

这个问题不是特定于任何浏览器,我已经用Firefox和IE8重现了这个问题。

使用Fiddler我可以看到服务器突然发送了一个新的Set-Cookie标头,尽管在请求中发送了先前的会话cookie。

从那一刻起,服务器将在两个会话之间随机切换,没有一个会话似乎过期,它们保留自己的变量,但对于用户来说它没用,因为可能会要求他登录然后处理表单数据在已登录的会话中。

我可以尝试找出问题所在?

服务器是IIS6的共享主机,托管公司不太友好,但将所有内容移动到其他地方的成本使事情保持不变。

感谢。

更多信息: 显示Aaron D.建议的机器名称始终显示相同的名称,但我已将应用程序的开始时间存储在global.asa中:

Sub Application_OnStart()
    Application("Start") = now()
End Sub

事实证明,当在测试页面中显示该信息时,它会随着检测到的会话更改而发生变化。因此,有两个服务器(具有相同的名称)或以某种方式运行两次应用程序。 有可能吗?

1 个答案:

答案 0 :(得分:2)

我有几个想法但没有确定性。

  1. 是否有一些通过HTTPS和其他人通过HTTP请求? Cookie是否设置为仅通过安全连接传输?

  2. 您的请求是否在子域和主域之间交替?例如,有些请求发送到www.foo.com,其他请求发送到foo.com?除非您在cookie中设置域,否则cookie之间可能不会共享cookie。多个子域也可能发生这种情况。

  3. 这个是不常见的,但是在分布负载的多个服务器上托管您的网站的公司?您可以通过创建此处指定的页面来说明这一点: http://mentaljetsam.wordpress.com/2008/01/29/classic-asp-code-to-print-current-server-name/
    如果情况确实如此,那么解决方案就是将会话状态模型从“InProc”更改为使用共享资源(如数据库)。

  4. 您确定它会在会话之间切换,并且不会使会话过期吗?可能是您的应用程序正在重新启动(基于您的编辑),这会导致您的会话被终止,但缓存的结果使其看起来仍然有效。您可以尝试使用像Fiddler这样的HTTP流量监视器进行硬刷新和/或检查结果吗?这可能会让您更好地了解哪些请求实际上是通过网络传输的。