Iis 7 IIS7和经典ASP会话

Iis 7 IIS7和经典ASP会话,iis-7,asp-classic,session,Iis 7,Asp Classic,Session,我有一个用经典ASP编写的旧web应用程序,它过去运行在IIS6服务器上没有问题,长话短说,我把它移到了运行SunOne ASP的Linux服务器上,该服务器也运行得很好(经过几次小的调整),现在正试图访问最初使用的一些第三方COM控件,我又把它移回了Windows服务器,这次是2008年运行IIS7 总体而言,该应用程序运行良好,但现在似乎出现了一个随机问题,会话变量丢失了。这意味着用户将自动从系统中注销 这一切都非常简单,只需使用会话变量a来保存登录状态(以及其他一些位和块) 如果会话(“登

我有一个用经典ASP编写的旧web应用程序,它过去运行在IIS6服务器上没有问题,长话短说,我把它移到了运行SunOne ASP的Linux服务器上,该服务器也运行得很好(经过几次小的调整),现在正试图访问最初使用的一些第三方COM控件,我又把它移回了Windows服务器,这次是2008年运行IIS7

总体而言,该应用程序运行良好,但现在似乎出现了一个随机问题,会话变量丢失了。这意味着用户将自动从系统中注销

这一切都非常简单,只需使用会话变量a来保存登录状态(以及其他一些位和块)

如果会话(“登录状态”)为“loggedin”,则
Response.Status=“302对象已移动”
Response.Redirect“/admin/default.asp”
如果结束
该应用程序运行在共享托管服务器上,我最担心的是为什么会发生这种情况,因此如果我必须在同一平台上托管任何其他ASP应用程序,我不会遇到类似的问题


这可能是因为IIS7正在回收应用程序池并清除过程中的任何会话数据吗?如果是这样的话,除了编写我自己的状态管理/会话处理程序例程(如果所有其他操作都失败,这是下一个任务)之外,还能做些什么呢?

可能是工作进程被回收,但这只会断断续续地发生,而不是定期发生(即如果服务器受到重击,每12小时或更早一次发生一次)

很长一段时间,但是当您遇到问题时,您是否使用IE8,我们在IE8丢弃cookie时遇到了类似的问题,目前我们正在发送“behave like ie7”头,您可以随请求一起发送(ASP with JScript btw):

在我们所有页面的标题中:

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"/>


不过,这可能是在转移注意力,你应该和你的托管公司谈谈。听起来很像你的游泳池是一个被回收的地方。主机应该保存这些日志以及生成它们的原因


您还应该询问您的站点是否与其他站点共享一个池。

不确定该池是否适用于此实例,但如果您在IIS7上运行并在SSL和非SSL页面之间重定向,则classic中可能会有不同的会话,具体取决于站点配置属性。在IIS中,查看“ASP”部分“会话属性”-“安全连接上的新ID”的设置可能是罪魁祸首。

您应该确保您没有运行不需要花园的web花园。在应用程序池设置中的“进程模型”下,查看“最大工作进程数”。如果该值大于“1”,则可能存在您描述的问题。我知道我做到了


在此处阅读有关Web Gardens的信息:

感谢您对(IIS 7.5)“应用程序池(高级设置)->空闲超时(组:进程模型)”的提示

对于一直丢失当前会话的经典ASP站点,它用于“空闲超时(分钟)”的单个应用程序池的(默认)设置为5minutes。我将其更改为更高的值,现在看起来很好。 由于目前这是一个测试系统,我是唯一一个造成流量的测试用户,“空闲超时”似乎适用于我在网站上无所事事超过5分钟的情况

问候
ASDev这件事发生在我身上!通过在IIS的应用程序池中将属性
Maximum Worker processs
设置为值
1
,可以解决此问题。

是所有用户都同时丢失会话,还是只有一个或两个用户?不确定这一个,因为它是以分布式方式使用的,并且不是每个人都同时使用它。但每个人都会遇到这个问题。不,它跨越了所有平台。我在Mac电脑上使用Safari或FF,或在Windows上使用IE时,都会遇到这种情况。我已经有了你提到的相同的头插件,只是在客户端:我怀疑,我不知道它是否有效,因为这是共享主机,在主机控制面板中有一个选项“回收应用程序池”,如果同一服务器上的其他人执行该操作,然后我们都出去了。有可能吗?负载平衡器?如果是这样的话,您可能不会有粘性会话。回收可以做到,但你们不应该都在同一个应用程序池中吗?我知道这是一个借口,但如果它很重要,那么就在另一台主机上使用30免费试用,看看你是否有同样的问题?我遇到了一个问题,会话数据会在不同的值之间循环,即使会话id保持不变。原来这就是问题所在。
// Force IE8 to act as IE7...grumble
Response.AddHeader( "X-UA-Compatible", "IE=EmulateIE7" );
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"/>