To refresh the session you need to make a call to something - I suggest to simple handler that just show an empty gif. Here is a simple code for that:
public class JustEmptyGif : IHttpHandler ,IRequiresSessionState
{
// 1x1 transparent GIF
private readonly byte[] GifData = {
0x47, 0x49, 0x46, 0x38, 0x39, 0x61,
0x01, 0x00, 0x01, 0x00, 0x80, 0xff,
0x00, 0xff, 0xff, 0xff, 0x00, 0x00,
0x00, 0x2c, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x01, 0x00, 0x00, 0x02,
0x02, 0x44, 0x01, 0x00, 0x3b
};
public void ProcessRequest (HttpContext context)
{
context.Response.ContentType = "image/gif";
context.Response.Buffer = false;
context.Response.OutputStream.Write(GifData, 0, GifData.Length);
}
public bool IsReusable
{
get {
return false;
}
}
}
This code is just a handler, let say EmptyImage.ashx
and notice that I have include the IRequiresSessionState
that make it to call and update the session.
Now the only think that you have to do is to update a hidden image with some script, as:
<img id="keepAliveIMG" width="1" height="1" alt="" src="EmptyImage.ashx?" />
<script>
var myImg = document.getElementById("keepAliveIMG");
myImg.src = myImg.src.replace(/?.*$/, '?' + Math.random());
</script>
I have place the random number at the end to avoid to keep it on cache and force it to reload it again. No post back happens here, just a small image load.