【问题标题】:How to check how many seconds are left for the current session?如何检查当前会话还剩多少秒?
【发布时间】:2012-10-24 16:56:20
【问题描述】:

Session.Timeout 只返回Web.Config 中的静态值。但我想获得当前会话到期还剩多少秒的值。我该怎么办?


我试图从 JavaScript 中检索 Session.Timeout

setInterval('checkSession()', 100);

checkSession() 是:

function checkSession() {
    console.log('Timeout: <%= Session.Timeout %>');
}

页面在几分钟内吐出了当前的Session.Timeout 值,它仅证明Session.Timeout 是我在Web.Config 中设置的静态值,而不是显示还剩多少分钟的动态值。

【问题讨论】:

  • 如果您的代码是作为请求的结果而被调用的,那么会话超时将随着请求而被重置。
  • &lt;%= Session.Timeout %&gt; 是一次性评估,仅发生一次,在页面加载时,直到下一个页面加载才会更改

标签: asp.net session session-timeout


【解决方案1】:

我认为,如果您像大多数在线银行网站一样在客户端进行此控制,这才有意义。

<script>
   var timeLeft = <%= Session.Timeout * 60 %>; // seconds
   self.setInterval(checkTime, 1000);
   function checkTime()
   {
       timeLeft--;
       if (timeLeft < 120) // 2 minutes left
       {
         alert("2 minutes left.");
         // well you can refresh or close the page
         document.frames["iframeSession"].location.reload();
       }
   }

</script>

【讨论】:

  • 那么下一个问题是如何在警告后延长会话。
  • @Blaise - 不是你应该这样做,但你可以修改上面的部分,而不是 alert,刷新页面,将用户发送到其他地方等等 - 基本上就像在一些 cmets 中一样已经提到过,诱导客户端发出另一个请求(当然是对同一个网络应用程序)。
  • @Blaise - 我个人使用隐藏的 iframe 来做到这一点,而不是刷新整个页面。添加到答案。
  • 是不是说只要有页面加载,有调用服务器资源,超时就会再延长20分钟(假设我们使用默认的超时值)?跨度>
  • 是的。对应用程序的每次调用都会重置时间,即使是 AJAX 调用。
【解决方案2】:

如果您想在服务器上执行此操作(这没有多大意义),则等于 Session.Timeout,因为您正在会话中主动处理请求。

要在客户端执行此操作,您只需将 Session.Timeout 值传递给页面并使用 javascript 处理它(记录页面呈现的时间并与当前时间进行比较)。

【讨论】:

  • 但是我怎样才能在该会话中增加几分钟呢?
  • 您能否详细说明如何“触发新请求”?
  • 你可以刷新页面(window.location.href = window.location.href)或者只是触发一个ajax请求到foo.aspx之类的..
猜你喜欢
  • 2014-09-22
  • 2011-01-18
  • 1970-01-01
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
  • 2016-12-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多