Les sessions de navigateur étendues entraînent souvent des délais d'expiration de session côté serveur. Cet article présente une méthode non intrusive utilisant des requêtes AJAX chronométrées adressées à un gestionnaire factice pour résoudre ce problème, garantissant ainsi une activité de session continue.
Le code jQuery suivant lance un appel AJAX récurrent vers SessionHeartbeat.ashx
toutes les cinq minutes. Ce simple ping actualise le compteur de délai d'attente de la session.
<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
Ce gestionnaire HTTP gère la durée de vie des sessions. L'implémentation de IRequiresSessionState
garantit l'accès aux objets de session.
<code class="language-csharp">public class SessionHeartbeatHttpHandler : IHttpHandler, IRequiresSessionState { public void ProcessRequest(HttpContext context) { context.Session["Heartbeat"] = DateTime.Now; } }</code>
Le gestionnaire est enregistré dans web.config
:
<code class="language-xml"><httphandlers> <add path="SessionHeartbeat.ashx" type="SessionHeartbeatHttpHandler" validate="false" verb="GET,HEAD" /> </httphandlers></code>
Une simple animation de battement de cœur fournit une confirmation visuelle du maintien de la session. Les CSS et JavaScript suivants créent cet effet.
<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>
Cette solution étend efficacement les sessions ASP.NET pendant la durée de la fenêtre du navigateur, en conservant les fonctionnalités du formulaire et de l'application.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!