【发布时间】:2016-01-08 16:01:50
【问题描述】:
我有一个以前在 Windows 2003 服务器上运行的旧 Web 应用程序。当我将它移到新的 Windows 2008 服务器时,我开始收到一个以前从未遇到过的错误。该应用程序使用 Windows 登录。访问应用程序后,系统会要求用户登录。之后,它们可以免费用于应用程序。但是,问题是在使用一段时间后,用户将被引导并要求再次登录。该系统也比以前慢得多。它在 IIS7 上运行。在我看来,会话变量会丢失,但我不确定为什么会出现这种情况。
有趣的是,当用户再次登录时,他们通常可以使用应用程序更长的时间,然后才会被启动并要求重新登录。值得一提的是,似乎服务器上的用户越多,问题就越不突出。
还值得一提的是,我尝试将应用程序移至另一台 2008 年的服务器,并且在该服务器上运行良好。这使我相信问题出在服务器设置的某个地方。我并排查看了两台 2008 服务器的设置并注意到了差异,但无法找到会导致此类错误的差异。可能值得注意的一个区别是,不能正常工作的服务器是 32 位的,而能正常工作的服务器是 64 位的。虽然,我看不出这种差异如何导致应用程序丢失会话变量,但仍然可以正常工作。
附加信息:
- 每台服务器上的应用程序代码都是相同的,这让我相信错误出在服务器级别,而不是应用程序本身。
- 鉴于代码相同,我不认为这是从任何地方调用 Session.Abandon() 的结果。
- 我认为这不是会话超时造成的。
- 我了解到,由于应用程序池回收,其他人会丢失会话变量,并且应用程序池回收通常来自正在访问的配置文件(无论是来自用户还是来自防病毒软件等)软件)。我没有理由相信这里会出现这种情况,因为所有服务器都安装了相同的防病毒软件,并且应用程序在它们上运行良好。
- 在工作的服务器上,IIS 身份验证设置设置为禁用 windows 身份验证并启用匿名身份验证。而在另一台服务器上,情况正好相反。
任何有关此问题的帮助将不胜感激。
谢谢。
【问题讨论】:
-
即使不是由防病毒触发,它仍然可能是应用程序池回收。我相信应用程序池回收事件会出现在 Windows 事件日志中的某处,因此值得检查。 stackoverflow.com/questions/9984604/…
标签: session iis-7 windows-server-2008 session-state application-pool