我已经使用C#编程语言并使用代码优先方法在Asp.Net MVC中开发了一个应用程序,该应用程序已部署并且除了我面临的一个小问题之外,其他所有东西都正常运行。
会话过期时,它不会将用户重定向到应用程序的主登录页面,我希望在会话过期时,应用程序应将用户重定向到主登录页面。
怎么可能?
答案 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;
})
这将在您调用此方法的每个页面上检查会话,如果会话已过期,它将提醒用户并重定向到“登录”页面。您可以自定义自己的样式,例如模式或自定义警报框,以向用户显示其会话已过期。我希望这会有所帮助。