7

有没有办法知道在超时发生之前它在会话对象上留下了多长时间?

我知道如何从 webconfig 中获取实际超时,但是有没有办法知道会话上次活动的时间?

我的用户将在我的应用程序中填写大型表格,如果在他们点击“提交”之前需要超过 10 分钟,他们将被注销。如果会话即将超时,我想警告他们。我将使用 ajax 调用进行检查。

4

3 回答 3

5

您还可以通过后面的一些代码将 JavaScript 超时设置为会话超时。让它运行你想要的任何 JavaScript 函数。非常灵活,您无需检查当前时间......等等。

像这样的东西:

"window.setTimeout('yourJSFunctionGoesHere()', " + Session.Timeout + ");";

如果您想提前 2 分钟发出警告,您可以执行以下操作:

"window.setTimeout('yourWarningJSFunctionGoesHere()', " + Session.Timeout-2 + ");";
于 2013-05-08T09:40:08.120 回答
3

DateTime.Now您可以在 javascript 变量中跟踪服务器时间。
将其与 javascript 中的当前时间进行比较。

如果差异达到您的阈值限制,您可以在 javascript 中显示警告消息。

更好的是,您可以向您的服务器发起 ajax 调用,这会延长您的服务器超时时间。

于 2013-05-08T09:23:09.427 回答
3

我们可以通过在 web.config 上定义会话时间和警告时间并使用计时器来检查页面上的经过时间来处理这个问题。

网络配置:

<appSettings>
  <add key="SessionWarning" value="30" /> 
</appSettings>

<system.web>
   <sessionState timeout="45"/>
</system.web>

客户页面:

<script language="javascript" type="text/javascript">
   /* Page Time Out Warning Message Script */
    var sessionTimeoutWarning = '<%=System.Configuration.ConfigurationSettings.AppSettings["SessionWarning"].ToString()%>';
    var sessionTimeout = "<%= Session.Timeout %>";
    var sTimeout = parseInt(sessionTimeoutWarning) * 60 * 1000;

    var timeOnPageLoad = new Date();
    setTimeout('SessionWarning()', sTimeout);
    //To redirect to the home page
    setTimeout('RedirectToWelcomePage()', parseInt(sessionTimeout) * 60 * 1000);

    //Session Warning
    function SessionWarning() {
        //minutes left for expiry
        var minutesForExpiry = (parseInt(sessionTimeout) -
                                            parseInt(sessionTimeoutWarning));
        var message = "Your session will expire in another " + minutesForExpiry +
                                " mins! Please Save the data before the session expires";
        alert(message);
        var currentTime = new Date();
        //time for expiry
        var timeForExpiry = timeOnPageLoad.setMinutes(timeOnPageLoad.getMinutes()
                                            + parseInt(sessionTimeout));

        //Current time is greater than the expiry time
        if (Date.parse(currentTime) > timeForExpiry) {
            alert("Session expired. You will be redirected to home page");
            window.location = "../Home.aspx";
        }
    }

    //Session timeout add home page where you want to redirect after session timeout
    function RedirectToWelcomePage() {
        alert("Session expired. You will be redirected to home page");
        window.location = "../Home.aspx";
    }
    /* End */

</script>
于 2013-05-08T09:53:38.157 回答