global.asa中的经典asp错误:所需对象:'Session'

时间:2011-03-16 04:23:05

标签: session asp-classic vbscript global.asa

Windows 2003机器上的服务器端VB asp代码,安装了asp.net 2.0 *。我们遇到一个奇怪的问题,即用户第一次连接到网站时,Global.asa中的Session_OnStart会触发,但会话对象为空。简单的事情:

Session.Timeout = 30

导致以下错误:需要对象:'会话'

该网站已在“IIS管理器主目录”选项卡中“创建”,并且在该站点的“配置”页面中启用了“会话”。

在大多数情况下,如果用户刷新页面,则会话对象存在。但对于唯一用户的第一次访问总是会导致错误。

连连呢?代码没有错误,因为它在旧的Win2000系统上运行。

重申:安装.Net 2.0的Windows 2003 Server,运行IIS6。网站作为应用程序运行,而不是虚拟目录。

2 个答案:

答案 0 :(得分:2)

找出问题所在。这是因为在该应用程序池中有多个工作人员用于该网站。由于无法保证哪个工作进程会处理客户端的请求,并且每个工作进程都会创建自己的客户端会话实例,因此当IIS确定不同的工作进程应处理请求时,会话将被删除并重新创建。通过在应用程序池中仅使用一个工作进程,并将所有其他网站从应用程序池中移出并进入自己的网站,解决了问题。

我现在正在寻找一种在应用程序池中拥有多个工作人员的方法,但让客户端坚持使用工作进程。但那是我要研究的另一个问题。

答案 1 :(得分:0)

非常有趣的问题。

我们知道,当会话被明确放弃或最终超时时,它会立即被销毁。我会添加如下代码,以保证它不会发生。

If Session("test") Is Nothing Then
    Response.Redirect("Whatever.asp")
End If

您也可以调用在此块中创建对象的代码;这样,如果您检测到会话以某种方式被破坏,您可以重新创建它们。