MVC 4会话超时,Ajax轮询

时间:2013-05-15 13:49:17

标签: asp.net-mvc vb.net jquery asp.net-mvc-4 session-timeout

我正在寻找一种方法来防止在我向控制器发布AJAX帖子时刷新SessionState。

如果SessionState已过期,则此控制器返回JSON true / false对象。

Public Class JsonController
    Inherits BaseController

    Function SessionCheck()
        If Session("Contact") Is Nothing Then
            Return Json(JsonResponseFactory.ErrorResponse("Invalid contact"))
        End If
        Return Json(JsonResponseFactory.SuccessResponse())
    End Function

End Class

使用Javascript:

function session_check_function() {
    if (!session_check_complete)
        return;
    session_check_complete = false;
    jQuery.post(
        base_url + 'json/SessionCheck',
        {},
        function (data) {
            if (!data.Success) {
                jQuery('#session-modal').modal('show');
            } else {
                jQuery('#session-modal').modal('hide');
            }
            session_check_complete = true;
        }
    ).fail(function () {
        jQuery('#session-modal').modal('show');
        session_check_complete = true;
    });
}

var session_check_complete = true;
var session_check = setInterval(function () { session_check_function(); }, 2500);

问题是每次我对控制器进行POST时会话都会保持刷新,我不希望它刷新。

1 个答案:

答案 0 :(得分:4)

您可以在控制器上使用Sessionstate属性,以防止它刷新会话超时。

[SessionState(System.Web.SessionState.SessionStateBehavior.Disabled)]
public class JsonController : BaseController  

或者在VB.Net中:

<SessionState(System.Web.SessionState.SessionStateBehavior.Disabled)>
Public Class JsonController Inherits BaseController

当然,这是在控制器上设置的,因此该控制器中的任何其他方法也不会刷新会话超时。

<强>更新
在挖掘了一下之后,我找到了this article,它引入了一种定义每个动作方法的会话状态行为的方法。另一种解决方案可以在Disable Session state per-request in ASP.Net MVC

找到