C#MVC使用jquery创建基于计时器的自动注销?

时间:2011-06-08 23:31:47

标签: c# jquery asp.net-mvc timeout

如何创建一个jquery脚本,以便在一段时间不活动后自动注销用户?或者是否有一个jquery插件来执行此操作?它需要做类似的事情:

  1. 使用setTimeout创建计时器(例如30分钟)
  2. 每次用户与页面交互时重置超时
  3. 在setTimeout到期后,使用ajax调用服务器上的/ logout操作(asp.net mvc)
  4. 显示模式/灯箱对话框,告知用户再次登录

2 个答案:

答案 0 :(得分:3)

您需要在此处考虑几个不同的方面。首先,如果用户只是关闭浏览器或该人使用的计算机死亡会发生什么?如果用户在30分钟内访问该页面,该人是否仍应登录?

假设用户应该登录30分钟,无论如何。最简单的方法是在身份验证cookie上设置cookie超时。请记住在每个页面刷新时更新超时。并使用jQuery计时器检查cookie是否仍然有效,或者只是跟踪用户的登录时间。

所以,jQuery timers,您可以在每个页面上加载刷新cookie,然后检查定时器/延迟是否执行,如果是,则删除cookie并显示模式框。

有很多方法可以做到这一点,使用定时器是一种方式。

$(this).oneTime(1800 , function() {
    location.href='/logout'; // redirects to logout page.
});

另一个方法是使用服务器端检查,但你不会得到这个模型框,正如我所说,有很多方法,这一切都取决于你的喜好。

答案 1 :(得分:0)

我知道这是一个非常古老的问题,但对于那些寻找类似解决方案的人来说,如果他们在特定时间段内闲置,可能会有用吗

http://www.dotnetfunda.com/articles/show/3130/automatically-logout-when-user-is-idle-for-sometime

链接可能会消失,所以这里是代码 -

<script>
    $(function () {
        $("body").on('click keypress', function () {
            ResetThisSession();
        });
    });



var timeInSecondsAfterSessionOut = 30; // change this to change session time out (in seconds).
    var secondTick = 0;

    function ResetThisSession() {
        secondTick = 0;
    }

    function StartThisSessionTimer() {
        secondTick++;
        var timeLeft = ((timeInSecondsAfterSessionOut - secondTick) / 60).toFixed(0); // in minutes
    timeLeft = timeInSecondsAfterSessionOut - secondTick; // override, we have 30 secs only 

        $("#spanTimeLeft").html(timeLeft);

        if (secondTick > timeInSecondsAfterSessionOut) {
            clearTimeout(tick);
            window.location = "/Logout.aspx";
            return;
        }
        tick = setTimeout("StartThisSessionTimer()", 1000);
    }

    StartThisSessionTimer();