不活动的C#15分钟后自动注销 - javascript

下面的方法将在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);
}

参考方案

不用一个计时器运行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秒而不是几分钟来进行更好的测试。在文本字段中输入内容或单击按钮以重置倒计时。

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

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;
  });

});

<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>

javascript popupwindow之后的行如何工作? - javascript

好的,我有一个来自后面代码的方法,可以创建一个popupwindow。然后有一行代码要在那之后执行,我想知道那行代码何时执行,是在使用popupwindow之后执行还是在创建popupwindow之后执行?例如:void exPopupWindowMethod() { string scr = "window.open('exampleP…

使用C#执行JavaScript页面 - javascript

我正在尝试使用C#抓取一个网站。在此过程中的某个时候,网站返回了我需要执行的JavaScript页面,以便它将生成一些参数,然后使用所生成的参数作为查询变量来发布请求。这是JavaScript文件https://jsfiddle.net/7aw5vr59/浏览器生成的结果文件如下所示:<imimxxxyyy id="ActiveX"…

Javascript-Urls的奇怪字符串比较行为 - javascript

最近,在编写我无法理解的javascript时遇到了字符串比较的问题。我从完全相同的网址创建了两个字符串,当我比较它们时返回false,但是在重新分配相同的字符串后,比较返回true。这是我的示例:var str1 = "http://google.com/"; var str2 = "http://google.com‏/&#…

如何在JQuery中重复相同的代码段,每个代码段附加不同的编号? - javascript

我遇到了针对由PHP代码动态创建的元素的问题。我想做的是toggle()元素。这是针对数据库中最新职位空缺的新闻提要。我做到了,但是通过手动编写jQuery代码来定位元素的方式实际上效率很低: $('#clickMe1').click(function(event){ event.preventDefault(); $('#ta…

ID未使用下拉JavaScript进入输入文本字段 - javascript

我正在使用javascript获取下拉列表选择ID id='odrid',这是脚本:$('#odrid').change(function(){ $.getJSON( 'fetch.php', 'odrid='+$('#odrid').val(), funct…