ASP.NET'InProc'超时 - 最后执行javascript代码

时间:2015-10-14 12:42:45

标签: javascript c# asp.net session session-state

在我的ASP.NET项目中,我使用'inproc'会话状态进行会话管理,当前的到期时间设置为 -

      <sessionState mode="InProc" timeout="1" ></sessionState>

即。会话超时为1分钟。

在“空闲”1分钟结束时,应用程序将重定向到会话过期的视图或页面。

在此重定向发生之前,我想在同一个控制器上下文中执行一些javascript代码。这里的另一点是,会话到期代码是从除框架的内置机制之外的其他地方调用的。

我已经尝试创建一个javascript'poll'函数来检查会话超时,然后在会话失效时执行某些操作,但是这样做是在每次进行xhr调用时重新验证会话。

基本思想是通过某种机制将javascript代码通知会话超时。代码库是一个现有代码库,对于像我这样的新.NET开发人员而言非常大。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我已经使用以下方法在20分钟的会话超时前2分钟警告用户,以便他们可以保存他们的工作并在2分钟内继续,否则他们的更改将会丢失

<script type = "text/javascript">
var sessionTimeoutWarning = 18;
var sessionTimeout = '<%= Session.Timeout %>';
var sTimeout = parseInt(sessionTimeoutWarning) * 60 * 1000;
setTimeout('SessionWarning()', sTimeout);

function SessionWarning() {
  var message = "Your current session will expire in " + (parseInt(sessionTimeout) - parseInt(sessionTimeoutWarning)) + " mins!\nPlease Save any unsaved changes before the session expires";
  var userid = '<%= Session("User_ID") %>';
  if (userid == '') {} else {
    if (parseInt(userid) > 0) {
      alert(message);
    }
  }
} 
</script>

它是一个ASP.NET Web表单应用程序,上面的脚本块已经插入到母版页中,并且可以在所有子页面中使用。

Session("User_ID")是一个代码隐藏变量,用于存储当前登录的用户ID,该ID必须是正非零整数。逻辑是,如果它是空的,零或非正数,则不显示消息。