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"
    );