在会议期间留出时间直到超时

时间:2013-05-08 09:17:43

标签: c# asp.net

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

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

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

3 个答案:

答案 0 :(得分:3)

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

这样的事情:

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

如果你想在你可以做的事情之前2分钟发出警告:

"window.setTimeout('yourWarningJSFunctionGoesHere()', " + Session.Timeout-2 + ");";

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:2)

我们可以通过定义会话时间来解决这个问题。 web.config上的警告时间,并使用计时器检查页面上的已用时间。

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>