【问题标题】:Backend only alternative to javascript periodic function call?后端只能替代javascript定期函数调用?
【发布时间】: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


【解决方案1】:

目标是检查会话是否仍然有效

这不是一个好方法,因为对服务器的请求会将会话超时设置为 0这意味着你让会话永远活着。如果用户忘记关闭浏览器并让计算机保持打开状态,其他人仍然可以访问该帐户。

这是我在我的网站中使用的方法受到银行/信用卡网站的启发。

默认情况下,会话超时为 20 分钟(您可以根据需要调整)。所以,我让计时器在客户端运行。当它达到 19 分钟时,我会显示一条带有分钟倒计时的弹出消息。

如果使用没有关闭弹出窗口,我会重定向到注销页面。

Here是概念和示例代码,不需要使用Telerik控件来实现。

【讨论】:

  • 这种情况略有不同,但当我遇到会话超时时会有所帮助。我的问题是当他/她从另一个窗口登录时踢出一个窗口中的用户。
  • 如果是这种情况,你可以使用你原来的方法,因为执行ajax请求时浏览器的会话是无效的。
猜你喜欢
  • 1970-01-01
  • 2012-09-24
  • 2020-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多