以下方法在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);
}
答案 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秒而不是分钟来进行更好的测试。在文本字段中键入内容,或单击按钮重置倒计时。
您将收到消息,然后是注销文本,您可以通过链接再次登录(这会模拟重定向):
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;
答案 1 :(得分:0)
所以window.setInterval
并没有像你想象的那样被覆盖。
你可以删除这个功能,让你的IIS或其他东西通过配置来处理它。
或者您可以清除间隔并再次设置,如下所述: How do I stop a window.setInterval in javascript?