suneel kumar gupta Ответов: 1

Показать предупреждение об истечении сеанса до 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 закрывает сеанс преждевременно, так как ему нужны ресурсы? Все это может сбить с толку ваш таймер. Если что-то не будет работать во всех сценариях, то нет особого смысла делать это.

Что касается вашего вопроса, то менее вероятно, что кто-то будет проходить через ваш дамп кода, чтобы настроить его и отладить ваш код для вас. Используйте отладчик и инструменты браузера, чтобы, по крайней мере, попытаться выяснить поток вашего кода и где он идет не так.

1 Ответов

Рейтинг:
1

ZurdoDev

Нет никакого способа точно сделать это; однако то, что вы можете сделать, это создать веб-метод с включенным сеансом, и в любое время, когда будут выполнены действия на стороне клиента, вы можете вызвать этот веб-метод с помощью вызова jQuery .ajax (), который сбросит сеанс на стороне сервера без необходимости обратной записи.

А затем сбросьте таймер в JavaScript.