IIS7 和经典 ASP 会话

问题描述 投票:0回答:6

我有一个用经典 ASP 编写的旧 Web 应用程序,它曾经在 IIS6 服务器上运行没有问题,然后长话短说,我将它移动到运行 SunOne ASP 的 Linux 服务器上,它也运行得很好(经过一些小的调整之后) ),现在为了访问最初使用的应用程序的一些第 3 方 COM 控件,我将其再次移回 Windows 服务器,这次是运行 IIS7 的 2008。

总的来说,该应用程序工作正常,但现在似乎存在一个随机问题,会话变量丢失。这意味着用户会自动退出系统。

这都是非常简单的东西,只是使用会话变量来保存登录状态(以及其他一些细节)。

If Session("login_status") <> "loggedin" Then 
 Response.Status="302 Object moved"
 Response.Redirect "/admin/default.asp"
End If

该应用程序在共享托管服务器上运行,我最担心的是为什么会发生这种情况,主要是如果我必须在同一平台上托管任何其他 ASP 应用程序,我将不会运行陷入类似的问题。

这是否是因为 IIS7 正在回收应用程序池并清除该过程中的任何会话数据?如果是这样的话,除了编写我自己的状态管理/会话处理程序例程(如果其他一切都失败的话,这就是下一个),可以采取什么措施?

iis-7 asp-classic session
6个回答
4
投票

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

对于我的经典 ASP 站点,它始终丢失当前会话,它用于“空闲超时(分钟)”的单个应用程序池的(默认?)设置为 5 分钟。我将其更改为更高的值,现在看起来不错。 由于当前这是一个测试系统,我是唯一造成流量的测试用户,因此“空闲超时”似乎在我在网站上不执行任何操作超过 5 分钟后适用。

问候 ASDev


3
投票

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

在这里阅读有关网络花园的信息:链接


1
投票

您应该与您的托管公司联系。听起来很像你的泳池正在被回收。主机应该保留这些日志以及它们生成的原因。

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


1
投票

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


1
投票

这件事发生在我身上!通过将属性

Maximum Worker Processes
设置为 IIS 中应用程序池中的值
1
可以解决此问题。


0
投票

可能是工作进程被回收,但这应该只是间歇性地而不是定期发生(即每 12 小时或更早,如果服务器受到重击)。

不太可能,但是当您遇到问题时,您是否正在使用 IE8?我们也遇到了 IE8 丢弃 cookie 的类似问题,现在我们一直在发送“behave like ie7”标头,您可以将其与请求一起发送(ASP顺便说一句,使用 JScript):

// Force IE8 to act as IE7...grumble
Response.AddHeader( "X-UA-Compatible", "IE=EmulateIE7" );

在我们所有页面的头部:

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

但这可能是一个转移注意力的事情

© www.soinside.com 2019 - 2024. All rights reserved.