您将不得不使用某种 JavaScript。如果没有某种客户端脚本(显然是 JavaScript)来处理请求,服务器就无法更新客户端网页。我做过类似的事情,询问用户是否想通过显示弹出消息来保持会话活跃。但在您的情况下,您似乎应该创建一个用于重新登录的 DNN 页面,并将一个带有简单 JavaScript 的自定义模块或 HTML 块添加到您要检查登录的每个页面(或将其放在模板页眉或页脚中)它将用户重定向到重新登录屏幕。就像是:
function setHeartbeat() {
setTimeout("heartbeat()", 300000); // every 5 min
}
function heartbeat() {
window.location.href = "Relogin.aspx?LastPage=" + window.location.href;
}
然后 Relogin.aspx 会在顶部显示用户已空闲 3 分钟的消息,并提供密码框。用户登录后,您可以将它们重定向回 LastPage(自从我使用 DNN 以来一直很麻烦,但我认为有一种方法可以格式化 URL,以便它自动重定向)。
一个对用户更友好的选项是在 3 分钟后显示一个弹出窗口,显示一个带有 OK 按钮的消息和密码字段。同样,这可以用 jQuery 来完成,你有类似的东西:
<div id="confirmSession" style="display: none">
<p class="message" style="display: none;"></p>
<p>You have been idle for 3 minutes, if you want to continue your session please re-enter your password.</p>
<p>Password: <input type="password" id="password" /></p>
<input type="button" id="btnContinueSession" />
<input type="hidden" id="userName" value='<%# HttpContext.Current.User.Principal.Identity %>' />
</div>
和以下 JavaScript:
function setHeartbeat() {
setTimeout("heartbeat()", 300000); // every 5 min
}
function heartbeat() {
$("#confirmSession").show();
}
$("#btnContinueSession").click(function () {
$.ajax({
type: "post",
url: "/relogin.aspx",
error: function(returnval) {
// Login failed for some reason, typically page not available 404 error, or code threw an error. so have the user try again.
$(".message").text(returnval + " failure");
$(".message").show();
},
success: function (returnval) {
$("#confirmSession").hide();
setHeartbeat();
}
});
});
在这里,您必须创建一个 relogin.aspx 页面或其他一些服务,它将接受用户名和密码,重新验证用户,然后如果密码无效则抛出错误(在上面的 jQuery 中捕获并显示到用户)。这显然需要更多的工作,并且需要自定义编码进行验证,而不是简单地重定向到登录屏幕,但它对用户更友好。
在这种 Ajax 方法中,值得注意的是您的服务器会话超时可能必须超过 3 分钟。如果在三分钟或更短的时间内,用户输入了他们的密码,他们将已经从服务器中注销,并且您将收到一个无效的身份验证错误。所以整体重定向到登录页面可能是最有意义的。但是您需要确保如果用户输入了您将其保存在 cookie 中或以某种方式保存的数据,以便您可以重新填充它(我听说过数百人对他们的数据“丢失”感到沮丧”)。
我取的例子是: