【问题标题】:Print the Remaining Session Time to View in Real-Time in ASP.NET打印剩余会话时间以在 ASP.NET 中实时查看
【发布时间】:2022-01-18 04:48:23
【问题描述】:

登录ASP.NET MVC项目时是否可以实时显示View中的剩余会话时间?我没有在问题中添加任何代码,因为我在研究过程中没有遇到任何解决方案。

【问题讨论】:

  • 会话的工作方式是任何用户对服务器的操作都应该重置会话。因此,如果您有 20 分钟的会话,那么在任何 http 请求时——也就是说,任何 C# 代码都运行除了心跳/信号器的东西——剩余的会话时间是总是整整 20 分钟。所以此时你真正要做的是为你的会话超时时间编写一个javascript倒数计时器。
  • 我可以在登录时设置一个计数器,但是如何在不同视图之间共享计数器值?此外,可以通过 web.config 文件更改会话持续时间。
  • 如果每次操作都会重置会话时间,那么在视图之间共享将没有任何价值。 Get value from web config

标签: c# asp.net .net


【解决方案1】:

我将分两步完成此操作,首先使用部分传递超时值,以便可以重复使用。例如从您的Web.Config etc 阅读并通过它。

然后在您的视图中,您可以添加此脚本并调整/修改值。

@functions {

    public int PopupShowDelay {
        get { return 60000 * (Session.Timeout - 1); }
    }

}

<script type="text/javascript">
    window.SessionTimeout = (function() {
        var _timeLeft, _popupTimer, _countDownTimer;

        var stopTimers = function() {
            window.clearTimeout(_popupTimer);
            window.clearTimeout(_countDownTimer);
        };

        var updateCountDown = function() {
            var min = Math.floor(_timeLeft / 60);
            var sec = _timeLeft % 60;
            if(sec < 10)
                sec = "0" + sec;

            document.getElementById("CountDownHolder").innerHTML = min + ":" + sec;

            if(_timeLeft > 0) {
                _timeLeft--;
                _countDownTimer = window.setTimeout(updateCountDown, 1000);
            } else  {
                window.location = "Home/TimeOutPage";
            }
        };

        var showPopup = function() {
            _timeLeft = 60;
            updateCountDown();
            ClientTimeoutPopup.Show();
        };

        var schedulePopup = function() {
            stopTimers();
            _popupTimer = window.setTimeout(showPopup, @PopupShowDelay);
        };

        var sendKeepAlive = function() {
            stopTimers();
            ClientTimeoutPopup.Hide();
            SessionTimeout.schedulePopup();
        };

        return {
            schedulePopup: schedulePopup,
            sendKeepAlive: sendKeepAlive
        };

    })();

</script>

@using (Html.BeginForm()) {
    <p>
        A timeout warning popup will be shown every @(Session.Timeout - 1) min.
    </p>
    @Html.Partial("TimeoutPartial")
}

【讨论】:

    猜你喜欢
    • 2017-11-29
    • 1970-01-01
    • 2016-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-15
    • 2013-01-20
    相关资源
    最近更新 更多