15分钟无效c#后自动注销

时间:2017-09-11 10:58:42

标签: javascript c# asp.net

以下方法在15分钟后注销用户。但问题是即使用户处于活动状态,它也会将其注销。

我正在寻找解决方案,当用户不是活动整整15分钟时,该方法会将其记录下来,除非该方法不会运行。

public void AutoRedirect()
{
    int int_MilliSecondsTimeOut = (this.Session.Timeout * 900000);
    string str_Script = @"
    <script type='text/javascript'> 
    intervalset = window.setInterval('Redirect()'," + int_MilliSecondsTimeOut.ToString() + @");
    function Redirect()
     {
       alert('Your session has been expired and system redirects to login page now.!\n\n');
       window.location.href='../index.aspx'; 
     }
    </script>";
    UtilityClass.RemoveCookie("login", Response);
    ClientScript.RegisterClientScriptBlock(this.GetType(), "Redirect", str_Script);
}

2 个答案:

答案 0 :(得分:1)

使用一个运行15分钟的单个计时器而不是这样做,如何将间隔设置为1分钟并在事件中倒数计数器?

此计数器可以通过其他事件轻松重置,例如AJAX调用,点击事件等,可以在jQuery bv .delegate.on方法中轻松触发。

如果没有发生此类重置,则倒计时达到0并且您可以执行重定向。

var inactivityCountdown = 15;

intervalid = window.setInterval(function Redirect()
 {
   inactivityCountdown--; 
   if (inactivityCountdown<1) {
    clearInterval(intervalid);
    alert('Your session has been expired and system redirects to login page now.!\n\n');
    window.location.href='../index.aspx'; 
   }
 }, 60*1000);

您可以看到,这种方式很容易在 到期之前随时重置计数器inactivityCountdown。在进行重定向时,不要忘记清除间隔。

在下面的代码片段中,我使用10秒而不是分钟来进行更好的测试。在文本字段中键入内容,或单击按钮重置倒计时。

您将收到消息,然后是注销文本,您可以通过链接再次登录(这会模拟重定向):

&#13;
&#13;
var initCountdownValue = 10;
var inactivityCountdown = initCountdownValue;
$(document).ready(function() {

  $(document).delegate("#login", "click", function(e) {
    location.reload();
  });

  function Logout() {
    document.getElementById('mainpage').style.display = "none";
    document.getElementById('loggedout').style.display = "";
    // or window.location.href="/logout.aspx"; 
  }

  var intervalid = window.setInterval(function Redirect() {
    inactivityCountdown--;
    $("#counter").text(inactivityCountdown.toString());
    if (inactivityCountdown < 1) {
      clearInterval(intervalid);
      Logout();
      alert('Your session has been expired and system redirects to login page now.!');
    }
  }, 1 * 1000);

  $(document).delegate(":input", "click change keydown", function() {
    inactivityCountdown = initCountdownValue;
  });

});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
</script>
<div id="mainpage" style="">
  <input type="text"></input>
  <input type="button" text="test"></input>
  <div>
    Counter:
    <div id="counter"></div>
  </div>
</div>
<div id="loggedout" style="display:none">
  You are logged out. To login, click <a id="login" href="#">here</a>
</div>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

所以window.setInterval并没有像你想象的那样被覆盖。 你可以删除这个功能,让你的IIS或其他东西通过配置来处理它。

或者您可以清除间隔并再次设置,如下所述: How do I stop a window.setInterval in javascript?