【问题标题】:Notify user of session expiry in asp.net webforms在 asp.net webforms 中通知用户会话到期
【发布时间】:2017-11-19 23:25:14
【问题描述】:

我的项目要求在会话到期之前通知用户会话到期。我已经使用 setTimeout 在 jquery 中实现了这一点。它工作正常,直到用户在单个选项卡中工作。如果多个选项卡保持打开状态,就会出现问题。在这种情况下,即使用户正在处理一个选项卡,因为其他选项卡处于非活动状态,警报也会显示在这些非活动选项卡上。这不应该发生,因为用户在一个选项卡上处于活动状态。

我正在使用类似下面的代码:

    function SessionExpireAlert() {

        var timeout = 20000;

        var seconds = timer / 1000;


        document.getElementsByName("seconds").innerHTML = seconds;
        setInterval(function () {
            seconds--;
            document.getElementById("seconds").innerHTML = seconds;

        },1000);
        setTimeout(function () {
            //Show Popup before 20 seconds of timeout.
            $find("mpeTimeout").show();
        }, timeout - 19 * 1000);
        setTimeout(function () {

            window.location = "Default.aspx";
        }, timeout);
    };
    function ResetSession() {
        //Redirect to refresh Session.
        window.location = window.location.href;
    }
    function ResetTimers() {
        clearTimeout(seconds);
        SessionExpireAlert
                   }

如果有任何建议,我都会很高兴...

【问题讨论】:

  • 那么,警报应该只显示在活动标签中吗?其他非活动标签应该如何处理?
  • 是的,因为用户在一个选项卡上处于活动状态,其他选项卡不应显示警报。如果用户在所有选项卡上都处于非活动状态,则警报应以同步方式以相同的时间显示在所有选项卡上。

标签: c# jquery .net session webforms


【解决方案1】:

在我看来,如果用户会话由应用程序服务器保存,那么在客户端代码中设置这种类型的控件并不是一个好习惯 (因为很难控制并与服务器端保持同步,如 asp.net 会话时间戳)。

最好创建一个 Web API,或者通过诸如 signalR 之类的库进行同步,以检索当前用户信息。这里,将是会话超时值。

每次用户更改站点位置时,或者每次您需要时,您都可以调用此 API 并检索值并将其作为计时器显示在页面上。 当然,您也可以通过 api 调用,由客户端强制重置会话时间戳。

【讨论】:

猜你喜欢
  • 2019-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多