句柄会话在MVC 2中使用ajax到期

时间:2012-01-04 06:34:26

标签: asp.net-mvc asp.net-mvc-2 jquery session-timeout

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

因此,java脚本函数将以指定的时间间隔对此操作执行ajax请求。 我有一些基本的问题..

1.如果我发送ajax请求,我认为这将刷新会话时间。因此,如果我使用此方法,会话将不会过期。我是对的吗?

如果刷新,我如何使用轮询检查会话到期

2 个答案:

答案 0 :(得分:3)

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

您可以在客户端的某处保存SessionTimeout并运行客户端计时器,一旦计时器到达终端重定向用户注销网址。

这是一个例子。 Model此处包含SessionTimeout值。

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

更加用户友好的方式是显示弹出窗口,表示会话将在一分钟内过期(如果会话超时15分钟,然后在14分钟后显示),那么用户将能够刷新页面。并继续工作。

答案 1 :(得分:1)

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

相关问题