打印剩余会话时间以在 ASP.NET 中实时查看

Posted

技术标签:

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

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

【问题讨论】:

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

【讨论】:

以上是关于打印剩余会话时间以在 ASP.NET 中实时查看的主要内容,如果未能解决你的问题,请参考以下文章

如何在asp.net中实现票据的打印

如何在asp.net中实现票据的打印

如何在ASP.NET MVC中实现报表打印和导出

来自数据库的 Pdf 文件以在 asp.net mvc 中查看

如何终止会话或会话 ID (ASP.NET/C#)

ASP Net Core 2.1 会话