如何向用户

时间:2016-09-29 06:23:02

标签: javascript angularjs asp.net-mvc session-cookies form-authentication

我们必须在30分钟不活动后,当他的会话过期时向用户显示弹出窗口,例如如果用户在过去30分钟内未使用应用程序,则向他们显示会话已过期的消息。

我们在我们的应用程序中使用MVC C#和AngularJs,并且正在使用表单身份验证cookie。由于会话在服务器端,我们必须在客户端检查这一点,如果我们执行任何Ajax命中检查会话,则会话重新创建并且永不过期。

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:2)

有两种方法可以实现这个目标

1)在ng-Idle使用link查看演示并下载js文件

var myApp = angular.module('myApp', ['ngIdle']); //inject ng-Idle in your app

myApp.config(['KeepaliveProvider', 'IdleProvider', function(KeepaliveProvider, IdleProvider) {
  IdleProvider.idle(30);
  IdleProvider.timeout(30);
  KeepaliveProvider.interval(10);//check every 10 mins..
}]);

2)使用一点JQuery& JS

我认为这个小小的模板会给你想要的结果,这是接近二。

var idleTime = 0;
$(document).ready(function () {
    //Increment the idle time counter every minute.
    var idleInterval = setInterval(timerIncrement, 60000); // 1 minute

    //Zero the idle timer on mouse movement means some activity is going on .
    $(this).mousemove(function (e) {
        idleTime = 0;
    });
    $(this).keypress(function (e) {
        idleTime = 0;
    });
});

function timerIncrement() {
    idleTime = idleTime + 1;
    if (idleTime > 30) { // 30 minutes
        //call your custom pop up to show user that he is inactive for 30 mins
        window.location.reload();
    }
}

希望这些方法能让您了解如何实现结果。

答案 1 :(得分:1)

您应该在页面中有一个标签,在页面上加载将此标签设置为您的会话的分钟数,例如:30:00分钟。

现在您将创建一个每秒减少计时器的函数,请点击此链接查看如何输出计时器Code for a simple JavaScript countdown timer?

现在,每次向服务器发出请求时都必须重置计时器,当页面加载时,JavaScript代码将触发定时器将自动重置的标签,但是当有一个标签时,这不会发生。 Ajax请求。 要做到这一点,你必须编写以下代码,它将拦截JQuery完成的任何Ajax调用,并在其中重置计数器,此代码应该在布局内或布局中加载的JavaScript文件

$( document ).ajaxSend(function() {
  //Reset the counter here
});