这不容易解释,但我会尽我所能.
问题已经在几年前使用经典asp构建的站点中开始,症状是管理员使用表单然后设置会话变量登录,但是当他们请求新页面时再次提示他们登录.
这个问题不是特定于任何浏览器,我已经重现了Firefox和IE8的问题.
使用Fiddler我可以看到服务器突然发送一个新的Set-Cookie标头,尽管在请求中发送了一个先前的会话cookie.
从那一刻起,服务器将在两个会话之间随机切换,没有一个会话似乎过期,它们保留自己的变量,但对于用户来说它没用,因为他可能会被要求登录然后表单数据在已经处理过登录会话.
我可以尝试找出问题所在?
该服务器是IIS6的共享主机,托管公司不是太友好,但将所有内容移动到其他地方的成本使得事情保持原样.
谢谢.
更多信息:
显示Aaron D.建议的机器名称始终显示相同的名称,但我已将应用程序的开始时间存储在global.asa中:
Sub Application_OnStart()
Application("Start") = now()
End Sub
事实证明,当在测试页面中显示该信息时,它会随着检测到的会话的变化而发生变化.因此,有两个服务器(具有相同的名称)或以某种方式运行两次应用程序.
可能吗?
最佳答案 我有几个想法但没有确定性.
>是否有一些通过HTTPS和其他人通过HTTP请求? Cookie是否设置为仅通过安全连接传输?
>您的请求是在子域和主域之间交替的吗?例如,有些请求发送到www.foo.com,其他请求发送到foo.com?除非您在cookie中设置域,否则cookie之间可能不会共享cookie.多个子域也可能发生这种情况.
>这个不太常见,但是在分布负载的多个服务器上托管您的站点的公司?您可以通过创建此处指定的页面来说明这一点:
http://mentaljetsam.wordpress.com/2008/01/29/classic-asp-code-to-print-current-server-name/
如果事实证明是这种情况,那么解决方案是将会话状态模型从“InProc”更改为使用共享资源(如数据库).
>您确定它会在会话之间切换,并且不会使会话过期吗?可能是您的应用程序正在重新启动(基于您的编辑),这会导致您的会话被终止,但缓存的结果使其看起来仍然有效.您可以尝试使用像Fiddler这样的HTTP流量监视器进行硬刷新和/或检查结果吗?这可能会让您更好地了解哪些请求实际上是通过网络传输的.