在MVC的專案架構底下,判斷Session是否還存在,不存在的話導回登入頁
在做專案的時候,會需要判斷Session是否還存在,
如果不存在之後要導回登入頁,
目前我的作法是在所有的controller都會繼承一個BaseController,
在BaseController 用自訂的 AuthorizeAttribute
在自訂AuthorizeAttribute之前,目前專案內View在發出POST到Controller的行為有分為兩種,
1.Form Post
2.在JS內用AJAX
這兩種呼叫的方式在自訂AuthorizeAttribute內會有不一樣的回傳行為
public override void OnAuthorization(AuthorizationContext filterContext)
{
EMP_Info empInfo = (EMP_Info)filterContext.HttpContext.Session["EMP_INFO"];
//AJAX呼叫
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
if (empInfo == null)
{
filterContext.Result = new JsonResult
{
Data = new
{
ReturnCode = "888",
ReturnMessage = "請重新登入!"
},
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
}
}
else
{
// 一般Submit Button的POST事件
if (empInfo == null)
{
filterContext.Result = new RedirectResult("~/SSO/SSOLogin");
}
}
}
如果是ajax呼叫,在前端JS的部分再做一些調整
var _Object = {EditEMPID: $('#hidEditEMPID').val()};
$.ajax({
type: "POST",
url: '../AU/CheckAUStateBeforeModify',
data: JSON.stringify(_Object),
async: false,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (_result) {
if (_result.ReturnCode == '000') {
_checkBeforeSubmitFlag = true;
}
else if (_result.ReturnCode == '888') {
// 先顯示提示訊息
alert(_result.ReturnMessage);
// 目前的專案是用IFrame,呼叫parent的Logout做登出,並導回登入頁
if (parent.Logout != undefined)
{
parent.Logout();
}
}
else {
alert(_result.ReturnMessage);
}
},
error: function (error) {
alert('error: ' + error);
}
});