gpt4 book ai didi

ASP.NET session 提前超时

转载 作者:行者123 更新时间:2023-12-04 06:07:03 25 4
gpt4 key购买 nike

我已经实现了从 a control by Kenneth Scott 派生的自定义 ASP.NET session 超时控制.它由 .NET 4 中的 IIS7 托管。

长话短说,它是我的站点母版页中包含的服务器控件(实现 System.Web.UI.WebControls.WebControl)。该控件是不可见的,并在呈现页面时启动计时器。 X 分钟过去后,会显示一个 DIV,告诉用户他们的 session 超时,并为他们提供一个按钮,如果他们想保持登录状态,请单击该按钮。

单击该按钮只会向服务器发出标准回发。除了重置 session 的滑动到期时间之外,它不会在服务器上执行任何有用的工作。

超时控制配置为在 session 到期前一分钟启动。当它达到 0 时, session 也应该到期,我将用户重定向到登录页面并通知他们由于不事件而超时。

它在大多数情况下都有效,但有时“不起作用”。该按钮似乎对用户仍然有效,但在尝试单击站点上的任何其他控件后,他们立即转储到登录页面(web.config 中定义的标准 ASP.NET 行为)。

我向 click 事件处理程序添加了一些日志语句,发现它没有触发。我的假设是客户端正在向服务器发送请求,但由于 session 已过期,因此我的事件处理程序永远不会触发。

我确信我的应用程序池不会被回收(它被配置为每天回收一次,并且没有进程或粘手指的管理员正在编辑应用程序目录中的文件)。这种故障是间歇性发生的。我们正在使用表单例份验证。

我在 web.config 中的 system.web 部分:

<sessionState mode="InProc" timeout="20" />
<authentication mode="Forms">
<forms path="/" loginUrl="Pages/LoginPage.aspx" protection="All" timeout="20" slidingExpiration="true" />
</authentication>

我目前的解决方法是将我们的 session 和表单超时增加到 30 分钟,并引入一个新的超时配置设置,它仍然会在 20 分钟后将用户注销。额外的 10 分钟提供了足够的填充,使我的控件按预期工作。

我不喜欢该解决方案,因为它充其量只是一种解决方法。我觉得我不太了解 ASP.NET session 超时机制(尽管已经阅读并重新阅读了 MSDN 文档)。谁能解释我所看到的行为,或者指出我所做的任何错误假设?

最佳答案

您可以尝试记录任何应用程序结束和结束的原因,只是为了排除它与此有关。我总是为此使用这个脚本(只需将它放在 global.asax 中):

protected void Application_End()
{
Type httpRuntimeType = typeof (HttpRuntime);

HttpRuntime runtime =
(HttpRuntime)
httpRuntimeType.InvokeMember("_theRuntime", BindingFlags.NonPublic
| BindingFlags.Static |
BindingFlags.GetField,
null, null,
null);

if (runtime == null)
return;

string shutDownMessage =
(string) runtime.GetType().InvokeMember("_shutDownMessage",
BindingFlags.NonPublic
| BindingFlags.Instance
| BindingFlags.GetField,
null,
runtime,
null);

string shutDownStack =
(string) runtime.GetType().InvokeMember("_shutDownStack",
BindingFlags.NonPublic
| BindingFlags.Instance
| BindingFlags.GetField,
null,
runtime,
null);

EventLog log = new EventLog();
log.Source = ".NET Runtime";
log.WriteEntry(
String.Format(
"\r\n\r\n_shutDownMessage={0}\r\n\r\n_shutDownStack={1}",
shutDownMessage,
shutDownStack),
EventLogEntryType.Information);
}

关于ASP.NET session 提前超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8235448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com