如何在MVC .Net中的会话超时后重定向?

时间:2018-01-29 05:33:00

标签: c# jquery .net asp.net-mvc session-timeout

我希望在2分钟不活动后重定向我的页面,为此我使用以下代码每隔2.5分钟ping一次控制器,如果会话已过期,我会重定向到原始登录页面:

`<script language="javascript" type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
<script language="javascript" type="text/javascript">
    var ReqTime =@Session.Timeout
        ReqTime = ReqTime * 60 * 1000 + (.5 * 60 * 1000);
    $(function () {
    setInterval(CheckSession, ReqTime);
});

function CheckSession() {
    $.post('@Url.Action("SessionInfo","Home")', null, function () {
        console.log("Time");
    });
}
</script>

控制器:

 public ActionResult SessionInfo()
    {

        if (Session["LoginUserName"]==null)
        {
             return RedirectToAction("Index","Home");
        }


    }

此代码不会重定向到Home / Index。你能告诉我哪里出错了吗?

2 个答案:

答案 0 :(得分:1)

尝试使用Javascript,因为从服务器端重定向需要回发

您可以按控制器检查会话并返回一个值以确定会话是否结束

 function CheckSession() {
    $.ajax({
        type: "GET",
        url: "@Url.Action("SessionInfo", "Home")"
    }).done(function (data) {
        if (data === true) {
            window.location.href = "@Url.Action("Index", "Home")";
        }
    }).fail(function (e) {
        alert('Error');
    });
}

控制器

public JsonResult SessionInfo()
        {

            if (Session["LoginUserName"] == null)
            {
                return Json(true, JsonRequestBehavior.AllowGet);
            }
            return Json(false, JsonRequestBehavior.AllowGet);
        }

此代码用于解释

答案 1 :(得分:0)

通过使这些会话检查ajax请求,您只需延长用户会话的生命周期。

如果您想通知浏览器用户会话已结束,我建议实施SignalR服务,以便在服务器和浏览器之间进行直接通信(推送功能)(实时)。

实施SignalR服务, 在session_end文件中创建global.asax方法,在session_end向用户浏览器发送一条消息,告知您的会话已结束。

就是这样