Существует множество примеров функциональности, которую вы хотите достичь, но я хотел дать вам базовый сценарий того, как вы будете перенаправлять на страницу входа в систему по истечении сеанса или когда пользователь выходит из системы:
При условии, что вы настроили сеанс, когда пользователь выйдет из системы, контроллер будет иметь метод выхода из системы:
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;
}
И, наконец, назовите это в своем View как:
$(document).ready(function () {
if (IsSessionActive()) return false;
})
Это будет проверять сеанс на каждой странице, которую вы вызываете этим методом, и, если сеанс истек, он предупредит пользователя и перенаправит на страницу входа. Вы можете настроить свои собственные стили, такие как модальное или настраиваемое окно предупреждения, чтобы показать пользователю, что их сеанс истек. Надеюсь, это поможет.