在asp.net webforms中通知用户会话到期

时间:2017-06-17 07:17:14

标签: c# jquery .net session webforms

我的项目中有要求在会话到期之前通知用户会话到期。我已经使用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
                   }

我很高兴有任何建议......

1 个答案:

答案 0 :(得分:0)

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

最好创建一个Web API,或者像signalR这样的库同步,以检索当前的用户信息。这里,将是会话超时值。

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