需要在30秒后或关闭浏览器后清除会话和注销用户

时间:2017-01-31 06:44:35

标签: javascript jquery asp.net-mvc

代码在MVC中,并且每个请求都使用ajax调用,因此url中没有更改。

使用下面的代码,如果用户不活动30秒,我将能够执行注销用户的操作。但在用户注销时无法执行操作。

<script>
    $(function () {
        $("body").on('click keypress', function () {
            ResetThisSession();
        });
    });
    var timeInSecondsAfterSessionOut = 30; // to change the session time out, change this value. Must be in seconds.
    var secondTick = 0;
    function ResetThisSession() {
        secondTick = 0;
    }
    function StartThisSessionTimer() {
        secondTick++;
        console.log(secondTick);
        if (secondTick > timeInSecondsAfterSessionOut) {
            clearTimeout(tick);
            window.location = '/Account/LogOff/0';
        }
        tick = setTimeout("StartThisSessionTimer()", 1000);
    }
    StartThisSessionTimer(); 
</script>

另外,我尝试了卸载 beforeunload 脚本方法,但结果并不符合预期。

如果用户未在30秒内执行任何操作或用户关闭浏览器,则需要注销用户。

提前感谢。

1 个答案:

答案 0 :(得分:0)

因为我看到var tick是本地的,并且在每个tick中定义,所以每秒调用超时:

function StartThisSessionTimer() {
             secondTick++;
             console.log(secondTick);
             if (secondTick > timeInSecondsAfterSessionOut) {
                 clearTimeout(tick);
                 window.location = '/Account/LogOff/0';
             }
             tick = setTimeout("StartThisSessionTimer()", 1000);
         }

尝试在超时的转发器范围之外分隔超时的初始化。 告诉我们是否有用。

韩国社交协会