延长的浏览器会话通常会导致服务器端会话超时。 本文提出了一种非侵入式方法,使用对虚拟处理程序的定时 AJAX 请求来解决此问题,确保连续的会话活动。
以下 jQuery 代码每五分钟启动一次对 SessionHeartbeat.ashx
的重复 AJAX 调用。这个简单的 ping 会刷新会话的超时计数器。
<code class="language-javascript">function setHeartbeat() { setTimeout("heartbeat()", 5*60*1000); // 5-minute interval } function heartbeat() { $.get("/SessionHeartbeat.ashx", function(data) { // Session refresh confirmation setHeartbeat(); }, "json"); }</code>
SessionHeartbeat.ashx
此 HTTP 处理程序管理会话生命周期。 实现 IRequiresSessionState
保证 Session 对象访问。
<code class="language-csharp">public class SessionHeartbeatHttpHandler : IHttpHandler, IRequiresSessionState { public void ProcessRequest(HttpContext context) { context.Session["Heartbeat"] = DateTime.Now; } }</code>
处理程序已在 web.config
中注册:
<code class="language-xml"><httphandlers> <add path="SessionHeartbeat.ashx" type="SessionHeartbeatHttpHandler" validate="false" verb="GET,HEAD" /> </httphandlers></code>
简单的心跳动画提供会话维护的视觉确认。 以下 CSS 和 JavaScript 创建此效果。
<code class="language-javascript">function beatHeart(times) { var interval = setInterval(function () { $(".heartbeat").fadeIn(500).fadeOut(500); }, 1000); // 1-second beat setTimeout(function () { clearInterval(interval); }, (1000 * times) + 100); }</code>
<code class="language-css">.heartbeat { position: absolute; display: none; margin: 5px; color: red; right: 0; top: 0; }</code>
此解决方案有效地在浏览器窗口的持续时间内扩展 ASP.NET 会话,从而保持表单和应用程序功能。
以上是如何使用不显眼的 AJAX 使 ASP.NET 会话保持活动状态?的详细内容。更多信息请关注PHP中文网其他相关文章!