मैं एक साधारण AJAX कॉल को एक डमी HTTP हैंडलर को करने के लिए JQuery का उपयोग करता हूं जो मेरे सत्र को जीवित रखने के अलावा कुछ नहीं करता है:
function setHeartbeat() {
setTimeout("heartbeat()", 5*60*1000); // 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"
);
}
सत्र हैंडलर जितना सरल हो सकता है:
public class SessionHeartbeatHttpHandler : IHttpHandler, IRequiresSessionState
{
public bool IsReusable { get { return false; } }
public void ProcessRequest(HttpContext context)
{
context.Session["Heartbeat"] = DateTime.Now;
}
}
कुंजी IRequiresSessionState को जोड़ने के लिए है, अन्यथा सत्र उपलब्ध नहीं होगा (= null)। हैंडलर निश्चित रूप से एक JSON क्रमांकित ऑब्जेक्ट को वापस कर सकता है यदि कुछ डेटा को कॉलिंग जावास्क्रिप्ट पर लौटाया जाना चाहिए।
Web.config के माध्यम से उपलब्ध कराया गया है:
<httpHandlers>
<add verb="GET,HEAD" path="SessionHeartbeat.ashx" validate="false" type="SessionHeartbeatHttpHandler"/>
</httpHandlers>
14 अगस्त, 2012 को बेल्केन्ड्रे से जोड़ा गया
मुझे इस उदाहरण का इतना पसंद आया, कि मैं HTML / CSS और बीट भाग के साथ सुधार करना चाहता हूं
इसे बदलो
//$("#heartbeat").show().fadeOut(1000); // just a little "red flash" in the corner :)
में
beatHeart(2); // just a little "red flash" in the corner :)
और जोड़
// 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 और CSS
<div class="heartbeat">♥</div>
/* HEARBEAT */
.heartbeat {
position: absolute;
display: none;
margin: 5px;
color: red;
right: 0;
top: 0;
}
यहाँ केवल पिटाई वाले भाग के लिए एक जीवंत उदाहरण है : http://jsbin.com/ibagob/1/