【发布时间】:2017-04-06 07:59:15
【问题描述】:
我的 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 秒周期中的位置),但有没有办法完全在后端做这样的事情?
谢谢。
【问题讨论】:
-
好吧,你不能从后端强制重定向。但是您可以在用户从后端发出下一个请求时将其重定向到登录页面。这不是授权系统已经做的吗?
-
我假设您发布了一个以某种方式在 cookie 中设置的“令牌”,后端身份验证模块应该有某种方式使该令牌过期,(您可以根据session) 然后将他重定向到没有有效令牌的主页,例如“0000”
-
@David 是的,这就是系统所做的,但我试图让它定期执行,每 12 秒执行一次请求。基本上,我正在尝试模拟对后端的请求。
-
@ITWorker:在这种情况下,您的选择要么是这种轮询方法,要么是一种 Web 套接字方法(可能使用 SignalR),它会“推送”到页面以响应服务器端事件。这当然会更复杂,但它也会摆脱那个 12 秒的窗口。基本上,只要 Window 2 以用户身份登录并使服务器端会话无效,该服务器端代码就会向 Window 1 中的 JavaScript 代码发送一条消息,该消息可以立即重定向用户。
-
@ITWorker:不,没有浏览器的参与是无法重定向浏览器的。要么用户必须启动一个动作,要么客户端代码需要启动一个动作。
标签: javascript ajax asp.net-mvc session