我的js文件中包含以下内容,该文件包含在ASP.NET MVC应用程序的主.cshtml页面中:
var ajax_call = function () {
$.ajax({
type: "GET",
cache: false,
url: "/Session/Index/",
success: function (result) {
if (!(result.length > 0)) {
window.location.href = '/Home/Index/'
}
}
});
};
var interval = 1000 * 60 * .2; // where X is your every X minutes---.2 -> every 12 seconds
setInterval(ajax_call, interval);
目标是检查会话是否仍然有效(SessionController仅在会话处于活动状态时返回结果),否则浏览器将重定向到Home / Index,其中HomeController具有重定向到登录的全局授权属性页面如果登录不是有效会话。
我的问题是,这是一种有效的方法吗?它有效(如果我与用户一起登录,然后打开一个新窗口并在新窗口中使用同一用户登录,之后不久将旧窗口重定向到登录屏幕,具体取决于它在12秒循环中的位置),有没有办法可以完全在后端做这样的事情?
谢谢。
答案 0 :(得分:1)
目标是检查会话是否仍然有效
这不是一个好方法,因为 对服务器的请求会将会话超时休息为0 。 这意味着您将永远保持会话活动。如果用户忘记关闭浏览器并让计算机保持打开状态,则其他人仍然可以访问该帐户。
以下是我在网站中使用的方法,受到银行/信用卡网站的启发。
默认情况下,会话超时为20分钟(您可以调整所需的方式)。所以,我让计时器在客户端运行。当它达到19分钟时,我会显示一个带有分钟倒计时器的弹出消息。
如果使用没有关闭弹出窗口,我会重定向到注销页面。
Here是概念和示例代码,但您无需使用Telerik控件来实现它。