2012-01-04 65 views
2

我想检查会话过期与否。 所以我决定创建一个名为IsServerExpired的动作,让它返回一个包含布尔值的json对象和重定向url。处理会话在MVC 2中过期与AJAX

因此Java脚本函数会做一个Ajax请求以指定的时间间隔这个操作。 我有一些基本的问题..

1.如果我发送一个Ajax请求,我认为,这将刷新会话时间。所以实际上,如果我使用这种方法,会话将不会过期。我对吗 ?

如果刷新我怎么能检查会话过期使用轮询

回答

3

一旦会话过期,还有更简单的方法可以注销用户。

您可以保存在某个地方SessionTimeout在客户端和运行客户端计时器,计时器一旦达到最终用户重定向到注销URL。

这里是一个例子。 Model here containts SessionTimeout value。

$(document).ready(function() { 
    var timeOutInMinutes = @Model; 
    if(timeOutInMinutes > 0) 
    { 
    setTimeout(function() { 
     window.location = 
       '@Url.Action("Logout", "Authentication", new {area=""})'; 
    },timeOutInMinutes * 1000 * 60); 
    } 
}); 

更多用户友好的方式是显示弹出窗口,会说,会议将wihtin一分钟内结束(如果会话超时15分钟,再经过14分钟表现出来),这样用户就可以刷新页面。并继续工作。

+0

如果我在页面加载后做了ajax调用,这个方法就不会考虑这个。不是吗?这是我的情况的一个缺点。 – Lijo 2013-10-14 12:15:24

+0

是的,根据web.config中的会话超时值,此方法仅在客户端等待。 – 2013-10-18 05:40:11

1

我认为你是一个ASP.NET会话和身份验证cookie之间扑朔迷离。我怀疑你在这里谈论身份验证cookie到期。如果您在web.config中将slidingExpiration设置为true,则轮询AJAX请求将更新超时,以使其不适用。 Phil Haack描述了一种在this blog post的AJAX调用中检测验证cookie过期的非常优雅的方法。