增加会话超时时间

13

网站托管在 IIS 7.0

我希望将我的 ASP.NET 应用程序的会话超时时间设置为 9 小时。
这已经在 web.config 中设置。

<sessionState timeout="540"></sessionState>

但是,据我了解,如果在托管网站的IIS中将超时设置为20分钟,则设置扩展会话状态将毫无用处。

首先,我想确认这个假设是否正确。

问题在于我无法访问共享托管Web服务器的IIS。

现在,在一些研究之后,我找到了代码项目中的另一个解决方案。这听起来像是一个绝妙的主意。这个想法是在主页面中插入一个iframe。该iframe将包含另一个页面,其meta刷新时间小于20分钟。

 Response.AddHeader("Refresh", "20");

这个想法对我来说看起来不错。但是这篇文章已经有七年了。而且在评论部分,有一个用户抱怨说如果页面被最小化,这种方法就行不通了,我担心当我的页面标签没有激活时也会出现同样的情况。
我想知道以下几点:
  1. 即使页面被最小化,刷新方法是否适用于我的场景?
  2. 是否有其他方法可以增加会话超时时间,覆盖 IIS 超时设置?
  3. 此外,我在 Stack Overflow 上读到一些问题的答案表明“ IIS 会话超时适用于经典 ASP 页面”。那么为什么我的扩展超时时间没有触发呢?
1个回答

7
首先,我想确认这个假设是否正确。
是的,在内存会话状态模式下使用时,这种假设绝对正确。在这种情况下,会话存储在内存中,由于IIS可能会在不同情况下(空闲期间、达到CPU/内存阈值等)终止AppDomain,会话数据将会丢失。您可以使用进程外会话状态模式,要么是StateServer或SQLServer。在第一种情况下,会话存储在运行aspstate Windows服务的专用机器的内存中,在第二种情况下,它是专用的SQL Server。 SQL Server是最可靠的,但显然最慢。
1)即使页面最小化,刷新方法是否适用于我的场景?
隐藏的iframe仍然起作用以保持会话活动状态,但正如我之前所说,可能会出现某些情况导致IIS仍然卸载应用程序(达到CPU/内存阈值=>您也可以在IIS中进行配置) 。
2)是否有其他方法可以增加会话超时时间,覆盖IIS超时设置?
先前的方法不会增加会话超时时间。它只是通过定期向服务器发送HTTP请求来维护会话活动状态,以防止IIS关闭AppDomain。
3)另外,我在Stack Overflow上读到了一些问题,其中答案说明IIS会话超时是针对clasic ASP页面的。那么为什么我的扩展超时没有触发?
不存在IIS会话超时这样的东西。会话是一个ASP.NET工件,而IIS是一个Web服务器,不知道任何关于会话的事情。
个人上我不在应用程序中使用会话,我只是禁用它们:
<sessionState mode="Off"></sessionState>

使用标准的HTTP工件,例如cookie、查询字符串参数等来维护状态。我更喜欢将信息存储在后端,并使用唯一ID在以后检索,而不是依赖于会话。


1
在IIS 6中,您可以在网站属性的“主目录”选项卡下的“配置”按钮的“选项”选项卡中配置“会话超时”。 - Andomar
@Andomar,哦,我不知道这个。那么这个设置反映了什么?它是如何使用的?经典ASP?因为对于ASP.NET会话,IIS没有这个词。 - Darin Dimitrov
@DarinDimitrov:那我的会话可能发生了什么。我将其设置为<sessionState timeout="540"></sessionState> - naveen
@naveen,你有什么症状吗?你是否丢失了会话数据?如果是这种情况,这强烈表明应用程序域已被Web服务器回收。 - Darin Dimitrov
2
@naveen,我使用cookies,当需要传递复杂对象时,我会在POSTing、查询字符串参数之间进行选择,或将对象保留到后端,然后根据ID重新获取。有很多可能性。一切都取决于我的具体情况和我要做什么。这个问题没有单一的答案。 - Darin Dimitrov
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接