2015-10-14 18 views
0

在我的ASP.NET项目中,我使用“进程内”会话状态的会话管理和当前的过期时间设置为 -ASP.NET“是InProc”超时 - 在年底执行JavaScript代码

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

即会话超时是1分钟。

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

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

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

基本思想是通过某种机制向JavaScript代码通知会话超时。代码库是一个现有的代码库,对于像我这样的新开发的.NET开发人员来说,它是相当大的。

任何帮助表示赞赏。

+0

如果您在当前会话时间内与服务器进行任何交互,该会话将始终进一步扩展。这一切都必须在客户端没有任何电话到服务器 – haraman

+1

看看['onbeforeunload'事件](http://www.w3schools.com/jsref/event_onbeforeunload.asp)。这可能是你需要的。 –

+0

@haraman - 你是对的。任何对服务器的调用都会延长会话。为了在客户端完成这一切,我必须在客户端引入一个“空闲”检查逻辑,这与服务器已经在做的事情不同。不知道这是否是正确的解决方案。 – FrailWords

回答

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必须是正的非零整数。逻辑是,如果它是空的,零或非正面的,不要显示消息。

+0

我想我的问题并不清楚,但这里提到的超时是'空闲'超时。您提到的方法可能会导致严重超时。 – FrailWords

+0

你能解释什么是'空闲'超时? – haraman

+0

'空闲'超时是指在没有与运行应用程序的浏览器进行交互时(无论是通过鼠标还是键盘) - 基本上用户交互一段时间。 – FrailWords