private bool AddStateKeeperScript() { uint minAllowedTimeout = 0; // в минутах HttpSessionState session = HttpContext.Current.Session; if (session.Timeout > 0 && (session.Mode == SessionStateMode.StateServer || session.Mode == SessionStateMode.SQLServer)) { minAllowedTimeout = (uint)session.Timeout; } ViewStateElement viewState = Globals.Settings.ViewState; if (viewState.Timeout > 0 && (viewState.Timeout < minAllowedTimeout || minAllowedTimeout == 0) && (viewState.ViewStateMode == ViewStateModes.InMsSql || viewState.ViewStateMode == ViewStateModes.InSession)) { minAllowedTimeout = viewState.Timeout; } if (minAllowedTimeout <= 0) { return(false); } uint delta = 180; // задержка до закрытия сессии сервером var alertTimeout = (int)(minAllowedTimeout * 60 - delta); // интервал в секундах по истечению которого произойдет обновление сессии while (alertTimeout <= 0) { delta -= 30; alertTimeout = (int)(minAllowedTimeout * 60 - delta); } if (alertTimeout <= 0) { return(false); } string keeperScriptWs = String.Format(@"setInterval(function() {{$.post('{0}', $($get('__VIEWSTATE')).serialize()).fail(function() {{ location.reload(); }});}}, {1});", ResolveUrl(@"~/checkstate.skhandler"), alertTimeout * 1000); //String.Format(@"setInterval(function(){{location.reload();}}, {0});", alertTimeout * 1000); if (ScriptManager.GetCurrent(Page) != null) { ScriptManager.RegisterStartupScript(this, GetType(), "keeperScriptWs", keeperScriptWs, true); } else { Page.ClientScript.RegisterStartupScript(GetType(), "keeperScriptWs", keeperScriptWs, true); } return(true); }
private bool AddStateKeeperScript() { uint minAllowedTimeout = 0; // в минутах HttpSessionState session = HttpContext.Current.Session; if (session != null && session.Timeout > 0 && (session.Mode == SessionStateMode.StateServer || session.Mode == SessionStateMode.SQLServer)) { minAllowedTimeout = (uint)session.Timeout; } ViewStateElement viewState = Globals.Settings.ViewState; if (viewState.Timeout > 0 && (viewState.Timeout < minAllowedTimeout || minAllowedTimeout == 0) && (viewState.ViewStateMode == ViewStateModes.InMsSql || viewState.ViewStateMode == ViewStateModes.InSession)) { minAllowedTimeout = viewState.Timeout; } if (minAllowedTimeout <= 0) { return(false); } uint delta = 180; // задержка до закрытия сессии сервером var alertTimeout = (int)(minAllowedTimeout * 60 - delta); // интервал в секундах по истечению которого произойдет обновление сессии while (alertTimeout <= 0) { delta -= 30; alertTimeout = (int)(minAllowedTimeout * 60 - delta); } if (alertTimeout <= 0) { return(false); } if (alertTimeout >= 2) { alertTimeout = alertTimeout / 2; } string keeperScriptWs = String.Format(@"setInterval(function() {{ $.post('{0}', {{""__VIEWSTATE"":$($get('__VIEWSTATE')).val(), ""__pingStamp"":$($get('__pingStamp')).val()}}).done(function(data) {{ if(data != ""OK"") {{ alert(""Извините! Данные на странице устарели, страница будет перезагружена.""); window.location.href = '{2}'; }} }}).fail(function() {{ alert(""Извините! Произошла ошибка связи с сервером, страница будет перезагружена.""); window.location.href = '{2}'; }}); var d = new Date(); $('#__pingStamp').val(d.getFullYear() + ""-"" + d.getMonth() + ""-"" + d.getDate() + "" "" + d.getHours() + ""."" + d.getMinutes() + ""."" + d.getSeconds() + ""."" + d.getMilliseconds()); }}, {1});", Page.ResolveClientUrl(@"~/checkstate.skhandler"), alertTimeout * 1000, Page.ResolveClientUrl(@"~/")); //String.Format(@"setInterval(function(){{location.reload();}}, {0});", alertTimeout * 1000); //if (ScriptManager.GetCurrent(Page) != null) // ScriptManager.RegisterStartupScript(Page, GetType(), "keeperScriptWs", keeperScriptWs, true); //else if (!Page.ClientScript.IsStartupScriptRegistered(GetType(), "keeperScriptWs")) { Page.ClientScript.RegisterStartupScript(GetType(), "keeperScriptWs", keeperScriptWs, true); } return(true); }