我们有一个可公开访问的Web应用程序。 当用户登录时,他会填写他的个人信息。
问题 用户可能忘记在自助服务终端或共享环境中关闭浏览器,可能允许其他用户查看其个人信息。
我们正在使用5分钟的会话超时,
我的想法 为Kiosks环境构建一个单独的应用程序是否更好?我可以向用户询问这是共享计算机还是公共计算机。如果是,我将如何进一步实施?
每3分钟不活动,我们想提示用户:“你想继续吗?”如果是,请获取密码确认,以使其更安全。
请您就此问题分享更多想法:如何使其更安全。
答案 0 :(得分:1)
您将不得不使用某种JavaScript。如果没有某种客户端脚本(显然是JavaScript)来处理请求,服务器就无法更新客户端Web页面。我做了类似的事情,询问用户是否希望通过显示弹出消息来保持会话活动。但在您的情况下,您似乎应该创建一个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以来,它一直是个hwile,但我认为有一种格式化URL的方法,因此它会自动重定向)。
更加用户友好的选项是在3分钟后显示弹出窗口,显示带有确定按钮的消息和密码字段。同样,这可以通过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中或某种程度上,那么你可以重新填充它(我听说有数百次的人因为他们的数据“丢失而感到沮丧” “)。
我采取的例子是: