通过 IIS 7.0
托管的网站我想在我的ASP.NET应用程序中将会话超时设置为9小时 这已在web.config
中设置<sessionState timeout="540"></sessionState>
但是,据我所知,如果在托管网站的IIS内部将超时设置为20分钟,则设置扩展会话状态将毫无用处。
首先,我想确认这种假设是否正确。
问题是我无法访问共享托管Web服务器的IIS。
现在,经过一些研究,我想出了代码项目中的另一个解决方案。这听起来像wonderful idea
。我们的想法是将iframe插入母版页。 iframe将包含另一个元刷新时间少于20分钟的页面。
Response.AddHeader("Refresh", "20");
这个想法对我来说似乎很好。但这篇文章已有7年历史。另外,在评论部分,如果页面最小化,用户会抱怨这不起作用,我担心当我的页面标签处于非活动状态时会发生同样的情况。
我想知道这些事情
答案 0 :(得分:7)
首先,我想确认这种假设是否正确。
是的,如果您使用内存中会话状态模式,这种假设是完全正确的。在这种情况下,会话存储在内存中,因为IIS可能会在不同情况下(不活动时段,达到CPU /内存阈值,......)拆除AppDomain,会话数据将丢失。您可以使用进程外会话状态模式。 StateServer或SQLServer。在第一种情况下,会话存储在运行aspstate Windows服务的特殊专用机器的内存中,在第二种情况下,它是专用的SQL Server。 SQL Server是最强大的,但显然是最慢的。
1)即使页面被最小化,刷新方法是否适用于我的场景?
隐藏的iframe仍然可以使会话保持活动状态但是正如我之前所说的那样,当IIS卸载应用程序时可能存在一些条件(达到CPU /内存阈值=&gt;你也可以在IIS中配置它)。 / p>
2)是否有任何其他方法可以增加会话超时,从而覆盖IIS超时设置?
之前的方法不会增加会话超时。它通过定期向服务器发送HTTP请求来简单地维护会话,以防止IIS将AppDomain关闭。
3)我还在Stack Overflow中阅读了一些问题,答案说明了这些问题 IIS会话超时是针对clasic ASP页面。那为什么不呢 我的延长超时没有解雇?
没有IIS会话超时这样的事情。该会话是一个ASP.NET工件。 IIS是一个对会话一无所知的Web服务器。
我个人不会在我的应用程序中使用会话。我只是禁用它们:
<sessionState mode="Off"></sessionState>
并使用标准的HTTP工件,如cookie,查询字符串参数,......来维护状态。我更喜欢在我的后端保留信息,然后使用唯一ID而不是依赖会话来检索它。