下面的方法将在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…