Javascript 避免用户在本地工作时被注销

Javascript 避免用户在本地工作时被注销,javascript,angularjs,asp.net-mvc-5,Javascript,Angularjs,Asp.net Mvc 5,我使用CookieAuthenticationOptions.ExpireTimeSpan设置用户会话的时间跨度。而且效果很好——梅比太好了。 当用户通过填写文本框等方式工作时,没有服务器活动,这会导致当用户按Save时,他被注销,并丢失所有输入的数据 是否有任何方法可以更新时间戳,以防止用户在没有回发的情况下工作时时间过期 我有一些想法: JavaScript轮询/ping-这可能会破坏用户离开客户端计算机一段时间后的注销点 制作一些JavaScript来捕获按键事件并向服务器发送一些pin

我使用CookieAuthenticationOptions.ExpireTimeSpan设置用户会话的时间跨度。而且效果很好——梅比太好了。 当用户通过填写文本框等方式工作时,没有服务器活动,这会导致当用户按Save时,他被注销,并丢失所有输入的数据

是否有任何方法可以更新时间戳,以防止用户在没有回发的情况下工作时时间过期

我有一些想法:

  • JavaScript轮询/ping-这可能会破坏用户离开客户端计算机一段时间后的注销点
  • 制作一些JavaScript来捕获按键事件并向服务器发送一些ping,但这可能很难实现,因为我使用了很多表单
  • 在重新发布数据时将用户重定向到上次使用的Web表单-如果可能的话

我使用AngularJS 1.4.7作为JavaScript框架。

如果解决方案处于调试模式,为什么不使用预处理器指令来设置备用过期时间

var options=新CookieAuthenticationOptions{
#如果调试
ExpireTimeSpan=System.Timespan.FromDays(1)
#否则
ExpireTimespan=System.Timespan.FromMinutes(20)//或您首选的Timespan
#恩迪夫
}

仅当用户处于“表单填充”模式时,才使用javascript ping服务器。例如,您可以在用户开始编辑时启动ping,在用户保存数据时停止ping。在表单中填写数据时,用户可能不会让电脑无人看管,如果他们这样做,那就是他们的错。

假设您在表单中使用ng模型,您可以查看模型的更改,并在更改时ping服务器

$scope.$watch('formModel',function(){
   //ping the server
},true);
为了避免每次按键或其他更改时都出现ping,您可以使用计时器

var okToPing = true;    
$scope.$watch('formModel',function(){
       if(okToPing){
          okToPing = false;
          //ping the server
          setTimeout(function(){okToPing=true},10000);
    },true);

我在这里放了一个代码笔来展示它是如何工作的:

我想您需要捕获ExpireTimespan超时并更新或延长Expiretime。此链接可能对您有所帮助。处理超时并对其进行管理


这个问题与调试模式无关