【问题标题】:Auto Redirect when Session Timeout ASP.NET C#(WebForms)会话超时时自动重定向 ASP.NET C#(WebForms)
【发布时间】:2018-06-23 05:26:59
【问题描述】:

我正在尝试使用 WebForms 在会话超时时进行自动重定向。我搜索但找到了设置预定义限制的代码。但是当我们按下键或移动指针等时,它们永远不会重置。我通过在每次鼠标移动和按键时调用 ajax 来使用 ajax 重置会话超时,但这会影响其他脚本的性能,使其变慢等。我已经尝试过这个清楚和这项工作的干净代码也应用了一些 ajax,但从未成功。 https://code.msdn.microsoft.com/Auto-redirect-to-login-e1782b2f

这是我的服务,可在每次鼠标移动或按键时获取会话过期时间。

    [WebMethod (EnableSession=true)]
    public static string GETExpireTime()
    {
        DateTime date = DateTime.Now;
        int sessionTimeout = HttpContext.Current.Session.Timeout;
        DateTime dateExpress = date.AddMinutes(sessionTimeout);
        return dateExpress.ToString("u", DateTimeFormatInfo.InvariantInfo).Replace("Z", "");
    }

这是我在 jquery 中重置它的方式。

$(document).ready(function () {
        $(document).keyup(function () {
            var data = {};
            setCookie("express", generalAjax(data, 'GETExpireTime').d);
        });
        $('*').mouseenter(function () {
            var data = {};
            setCookie("express", generalAjax(data, 'GETExpireTime').d);

        });
    });

如果有另一种方法可以完美地做到这一点,请帮助我,因为所有代码都设置了预定义的时间并在该时间间隔后强制注销但我需要在鼠标移动或按键时重置。谢谢

【问题讨论】:

标签: c# jquery asp.net webforms


【解决方案1】:

为什么每次按键或鼠标输入都使用 ajax?

您可以在 jQuery 中使用间隔函数来检查是否超时。如果超时,做你需要做的每一件事。

对于开始间隔,您只需设置一个开始会话时间的变量和另一个变量持续时间。

希望对你有帮助。

【讨论】:

  • 您没有给出解决方案,请使用评论提问。
  • 如果你使用间隔并在里面使用会话变量,那么它永远不会刷新值。它只取页面加载时的值。你可以试试这个实验。
  • 在后端你有 2 项 starttime 和 duration 当你想知道过期时你只需减去 time.now - startTime 如果它大于你知道过期的持续时间,而在前端页面是加载你有变量和调用函数间隔来检查它。
【解决方案2】:

因为这个解决方案只能用 JavaScript 来完成。所以我想出了我自己的代码。那是基于计数器。计数器在按键或鼠标移动时重置。事件也被清除并被注册回来。

<script>
        var delay = 10000;
        var sTimeoutMinutes = "<%=Session.Timeout %>";
        var sTimeoutSeconds = 60 * sTimeoutMinutes;
        var loops = sTimeoutSeconds / (delay / 1000);
        var globalCounter = 0
        var timeOutInterval = setInterval(processSessionTimeout, delay);
        $(document).ready(function () {
            $(document).keyup(function () {
                globalCounter = 0;
                clearInterval(timeOutInterval);
                timeOutInterval = setInterval(processSessionTimeout, delay);

            });
            $('*').mouseenter(function () {
                globalCounter = 0;
                clearInterval(timeOutInterval);
                timeOutInterval = setInterval(processSessionTimeout, delay);

            });
        });
        function processSessionTimeout() {

            globalCounter += 1;
            if (globalCounter >= loops) {
                clearInterval(timeOutInterval);

                Redirect();
            }
        }


        function Redirect() {
            window.location.replace("/Pages/Account/SignIn.aspx?session=Expired");
        }
    </script>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-03
    • 2012-07-29
    • 2010-11-03
    • 2015-06-18
    • 2023-03-21
    • 1970-01-01
    • 2011-08-02
    • 2011-02-20
    相关资源
    最近更新 更多