J'utilise JQuery pour effectuer un simple appel AJAX à un gestionnaire HTTP factice qui ne fait que garder ma session en vie:
function setHeartbeat() {
setTimeout("heartbeat()", 300000); // every 5 min
}
function heartbeat() {
$.get(
"/SessionHeartbeat.ashx",
null,
function(data) {
//$("#heartbeat").show().fadeOut(1000); // just a little "red flash" in the corner :)
setHeartbeat();
},
"json"
);
}
gestionnaire de session peut être aussi simple que:
public class SessionHeartbeatHttpHandler : IHttpHandler, IRequiresSessionState
{
public bool IsReusable { get { return false; } }
public void ProcessRequest(HttpContext context)
{
context.Session["Heartbeat"] = DateTime.Now;
}
}
Le La clé est d'ajouter IRequiresSessionState, sinon Session ne sera pas disponible (= null). Le gestionnaire peut bien sûr également renvoyer un objet sérialisé JSON si certaines données doivent être renvoyées au JavaScript appelant.
mis à disposition par web.config:
<httpHandlers>
<add verb="GET,HEAD" path="SessionHeartbeat.ashx" validate="false" type="SessionHeartbeatHttpHandler"/>
</httpHandlers>
ajouté de balexandre le 14 Août, 2012
J'aimais tant de cet exemple, que je veux améliorer la HTML/CSS et la partie de battement
modifiez cette
//$("#heartbeat").show().fadeOut(1000); // just a little "red flash" in the corner :)
dans
beatHeart(2); // just a little "red flash" in the corner :)
et ajouter
// beat the heart
// 'times' (int): nr of times to beat
function beatHeart(times) {
var interval = setInterval(function() {
$(".heartbeat").fadeIn(500, function() {
$(".heartbeat").fadeOut(500);
});
}, 1000); // beat every second
// after n times, let's clear the interval (adding 100ms of safe gap)
setTimeout(function() { clearInterval(interval); }, (1000 * times) + 100);
}
HTML et CSS
<div class="heartbeat">♥</div>
/* HEARBEAT */
.heartbeat {
position: absolute;
display: none;
margin: 5px;
color: red;
right: 0;
top: 0;
}
ici est un exemple en direct pour seulement la partie battant: http://jsbin.com/ibagob/1/
Vous pouvez vérifier ce lien pour obtenir une réponse aussi bien http://www.dotnetcurry.com/ShowArticle.aspx?ID=453 –