Session ın TimeOut süresini Web.Config den
<sessionState timeout="180"></sessionState>
ayarlamanıza ragmen hala çalışmıyorsa, session süresini hiç bitmeyecek şekilde canlı tutabiliriz, iki yöntem ile :
1. IFRAME çözümü
ihtiyacımız yeni bir webform ismi KeepAlive.aspx olabilir
protected string WindowStatusText = "";
protected void Page_Load(object sender, EventArgs e)
{
MetaRefresh.Attributes["content"] = "120;url=KeepAlive.aspx?q=" + DateTime.Now.Ticks;
WindowStatusText = "Last refresh " + DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString();
Session["KeepAlive"] = MetaRefresh.Attributes["content"];
Label1.Text = MetaRefresh.Attributes["content"] + "<br>" + WindowStatusText;
}
Daha sonra master page in veya ilgili sayfanın içerisinde
<IFRAME ID="KeepAliveFrame" src="KeepAlive.aspx" frameBorder="0" width="0" height="0" runat="server"></IFRAME>
Bitti gitti. 2 dk da bir sessionu canlı tutacak.
2. JQuery çözümü
Yeni bir ashx dosyası oluşturuyoruz :
public class SessionHeartbeatHttpHandler : IHttpHandler, IRequiresSessionState
{
public bool IsReusable { get { return false; } }
public void ProcessRequest(HttpContext context)
{
context.Session["Heartbeat"] = DateTime.Now;
}
}
web.config de ise :
<httpHandlers>
<add verb="GET,HEAD" path="SessionHeartbeat.ashx" validate="false" type="SessionHeartbeatHttpHandler"/>
</httpHandlers>
iligili sayfada ise :
function setHeartbeat() {
setTimeout("heartbeat()", 300000); // her 5 dk bir
}
function heartbeat() {
$.get(
"/SessionHeartbeat.ashx",
null,
function(data) {
setHeartbeat();
},
"json"
);
}