当会话在Asp.net中过期时,如何重定向到主登录页面?

时间:2019-05-22 08:08:12

标签: c# asp.net-mvc

我已经使用C#编程语言并使用代码优先方法在Asp.Net MVC中开发了一个应用程序,该应用程序已部署并且除了我面临的一个小问题之外,其他所有东西都正常运行。

会话过期时,它不会将用户重定向到应用程序的主登录页面,我希望在会话过期时,应用程序应将用户重定向到主登录页面。

怎么可能?

1 个答案:

答案 0 :(得分:0)

有许多您想实现的功能示例,但我想为您提供一个基本方案,说明在会话期满或用户注销时如何重定向到登录页面:

假设您已设置会话,则当用户注销时,控制器将具有Logout方法:

public ActionResult Logout()
 {
   Session.Abandon();
   Session.Clear();
   return RedirectToAction("LoginPage", "Login");
 }

这将破坏会话变量并将用户重定向到“登录”页面。

现在,当会话过期时,您可以执行以下操作:

public ActionResult SessionCheck()
 {
   string message = string.Empty;
   if (Session["UserName"] == null)
    {
      message = "Session expired. Please Login again";
    }
    return Json(message, JsonRequestBehavior.AllowGet);
  }

您可以使用AJAX在整个程序中检查此方法,也可以使用SessionState。

我更喜欢使用AJAX,所以给您一个简单的例子:

function IsSessionActive()
{
    var url ="/Login/SessionCheck";
    var param = {};
    param = JSON.stringify(param);
    var result = getResultPost(url, param);
    if (result != "")
    {
        alert("Session has expired, Please login again");
        //Redirect Here
        window.location="@Url.Action("LoginPage", "Login")";
        return true;
    }
}

function getResultPost(url, param) {
    var result;

    $.ajax({
        url: url,
        type: "POST",
        async: false,
        dataType: "json",
        data: param,
        contentType: "application/json; charset=utf-8",
        success: function (data, textStatus) {
            result = data; 
        },
        error: function (e) {             
            result = "Error";
        }          
    }); 
    return result;
}

最后在您的视图中调用它,就像这样:

$(document).ready(function () {
    if (IsSessionActive()) return false;
})

这将在您调用此方法的每个页面上检查会话,如果会话已过期,它将提醒用户并重定向到“登录”页面。您可以自定义自己的样式,例如模式或自定义警报框,以向用户显示其会话已过期。我希望这会有所帮助。