Показать предупреждение об истечении сеанса до 60 секунд ASP.NET применение
Я хочу показать предупреждение об истечении сеанса до 60 секунд. Он отлично работает.
если мы установили тайм-аут сеанса на 2 минуты, то оповещение придет раньше, чем через 60 секунд. Но пользователь заполняет форму, и это займет от 5 до 10 минут, значит, пользователь активен в моем приложении, тогда в этом случае как сбросить сеанс .
в моем текущем коде сеанс будет сброшен только на стороне сервера, а не на стороне клиента.
Пожалуйста помочь.
Что я уже пробовал:
Inside web config-- <sessionState timeout="5"/> <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" EnablePartialRendering="true" ScriptMode="Release" AsyncPostBackTimeout="150"> </asp:ScriptManager> <asp:LinkButton ID="lnkFake" runat="server" /> <asp:ModalPopupExtender ID="mpeTimeout" BehaviorID="mpeTimeout" runat="server" PopupControlID="pnlPopup" TargetControlID="lnkFake" OkControlID="btnYes" BackgroundCssClass="modalBackground" OnOkScript="ResetSession()"> </asp:ModalPopupExtender> <asp:Panel ID="pnlPopup" runat="server" CssClass="modalPopup" Style="display: none"> <div class="header"> Session Expiring! </div> <div class="body"> Your Session will expire in <span id="seconds"></span> seconds.<br /> Do you want to reset? </div> <div class="btnSection" align="right"> <asp:Button ID="btnYes" runat="server" Text="OK" CssClass="yes" /> </div> </asp:Panel> <script type="text/javascript"> var myTimer; var myTimer2; var myTimer3; function SessionExpireAlert(timeout) { var seconds = timeout / 1000; document.getElementsByName("seconds").innerHTML = seconds; myTimer = setInterval(function () { seconds--; document.getElementById("seconds").innerHTML = seconds; }, 1000); myTimer2=setTimeout(function () { //Show Popup before 20 seconds of timeout. $find("mpeTimeout").show(); }, timeout - 60 * 1000); myTimer3 = setTimeout(function () { window.location = '<%=ResolveUrl("~/CRM/Login.aspx") %>'; }, timeout); }; function ResetSession() { // hit web method to retain data in form $.ajax({ type: "POST", contentType: "application/json; charset=utf-8", url: '<%=ResolveUrl("~/CRM/Login.aspx/ResetSession") %>', dataType: "json", success: function (data) { clearInterval(myTimer); clearInterval(myTimer2); clearInterval(myTimer3); SessionExpireAlert(data.d); }, error: function (result) { alert("Error"); } }); } </script> ============Login.aspx.cs---- protected void Page_Load(object sender, EventArgs e) { Response.Cache.SetCacheability(HttpCacheability.NoCache); if (!Page.IsPostBack) { Session["Reset"] = true; Configuration config = WebConfigurationManager.OpenWebConfiguration("~/Web.Config"); SessionStateSection section = (SessionStateSection)config.GetSection("system.web/sessionState"); int timeout = (int)section.Timeout.TotalMinutes * 1000 * 60; ScriptManager.RegisterStartupScript(this, typeof(string), "SessionAlert", "SessionExpireAlert(" + timeout + ");", true); } } [WebMethod] public static string ResetSession() { int TimeOut = 0; try { HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);// To handle Session Timeout Functionality HttpContext.Current.Session["Reset"] = true; Configuration config = WebConfigurationManager.OpenWebConfiguration("~/Web.Config"); SessionStateSection section = (SessionStateSection)config.GetSection("system.web/sessionState"); TimeOut = (int)section.Timeout.TotalMinutes * 1000 * 60; //ScriptManager.RegisterStartupScript(this, typeof(string), "SessionAlert", "SessionExpireAlert(" + timeout + ");", true); } catch (Exception ex) { } return TimeOut.ToString(); }
F-ES Sitecore
Во-первых, пытаться сделать это бессмысленно. Ваш клиент понятия не имеет, когда закончится сеанс, поэтому то, что вы делаете, невозможно. Во-вторых, я бы спросил, Чего вы в конечном счете пытаетесь достичь, то есть какую выгоду вы пытаетесь добавить? А в последнее время каков ваш реальный вопрос?
suneel kumar gupta
Если я установил тайм-аут сеанса на 10 минут и до тех пор, пока система не будет находиться в состоянии ожидания 9 минут, то придет предупреждение о сбросе сеанса, в противном случае вам нужно снова войти в систему. Как только вы сбросите сеанс, предупреждение придет через следующие 10 минут.
F-ES Sitecore
Что делать, если у меня есть несколько вкладок? Что делать, если я "вернулся" с предыдущей страницы? Что делать, если IIS закрывает сеанс преждевременно, так как ему нужны ресурсы? Все это может сбить с толку ваш таймер. Если что-то не будет работать во всех сценариях, то нет особого смысла делать это.
Что касается вашего вопроса, то менее вероятно, что кто-то будет проходить через ваш дамп кода, чтобы настроить его и отладить ваш код для вас. Используйте отладчик и инструменты браузера, чтобы, по крайней мере, попытаться выяснить поток вашего кода и где он идет не так.