长时间的用户会话对于无缝的在线体验至关重要,尤其是当用户长时间打开浏览器窗口时。然而,延长会话超时等传统方法通常会损害安全性和性能。
本文提出了一个巧妙的解决方案:使用定时 AJAX 调用来静默维护活动会话。 这涉及定期向专用处理程序发送请求,刷新会话而不中断用户的工作流程。
jQuery 函数定期(例如每 5 分钟)发起对 SessionHeartbeat.ashx
处理程序的 AJAX 调用:
<code class="language-javascript">function setHeartbeat() { setTimeout("heartbeat()", 5*60*1000); // Every 5 minutes } function heartbeat() { $.get( "/SessionHeartbeat.ashx", null, function(data) { // Session heartbeat logic (optional visual cue) setHeartbeat(); }, "json" ); }</code>
SessionHeartbeatHttpHandler
(如下)利用 IRequiresSessionState
访问会话并简单地更新“Heartbeat”会话变量:
<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 和 HTML 添加微妙的视觉心跳动画:
<code class="language-html"><div class="heartbeat">♥</div></code>
<code class="language-css">.heartbeat { position: absolute; display: none; margin: 5px; color: red; right: 0; top: 0; }</code>
beatHeart
函数(如下)控制动画的淡入/淡出行为:
<code class="language-javascript">// Animate the heartbeat 'times' times function beatHeart(times) { var interval = setInterval(function () { $(".heartbeat").fadeIn(500, function () { $(".heartbeat").fadeOut(500); }); }, 1000); // Beat every second // Clear interval after 'times' beats (with 100ms buffer) setTimeout(function () { clearInterval(interval); }, (1000 * times) + 100); }</code>
这种方法提供了一种平稳、非侵入性的方式来维护 ASP.NET 会话,即使在长时间不活动的情况下也能确保积极的用户体验。
以上是如何在不影响用户体验的情况下保持 ASP.NET 会话活动?的详细内容。更多信息请关注PHP中文网其他相关文章!