Тайм-аут сеанса Обновить метатег Сброс .NET

2

Я хочу показать сообщение о завершении сеанса или перенаправить на страницу входа в систему .net веб-приложения.

Я пытался использовать событие Session_End global.asax, но когда это событие сработало, контекст закрывается, поэтому я не могу перенаправить на какую-либо страницу.

Я тоже пытался отправить метатег обновления, но он обновляет страницу, даже если пользователь перемещается по странице, то есть тег обновления никогда не обновляется.

Есть способ сделать это? Не могли бы вы мне помочь.

Заранее спасибо.

Теги:
asp.net-mvc

2 ответа

2
Лучший ответ

Вам нужно, чтобы JS периодически опрашивал сервер (например, каждую минуту, используя setTimeout), чтобы спросить, am я still logged in? , Если в качестве ответа он принимает значение false, ваш JS может делать все, что вы захотите (показать сообщение, перенаправить на страницу входа и т.д.).

Реализация на стороне сервера будет что-то вроде

[HttpGet]
[AllowAnonymous]
[DoNotExtendAuthentication]
public ActionResult IsAuthenticated(string url)
{
    var isAuthenticated = HttpContext?.User?.Identity?.IsAuthenticated ?? false;
     return Json(isAuthenticated); // change this line to whatever shape of JSON you want
}

public class DoNotExtendAuthenticationAttribute : ActionFilterAttribute
{
    public override void OnResultExecuted(ResultExecutedContext filterContext)
    {
        filterContext.HttpContext.Response.Cookies.Remove(
            FormsAuthentication.FormsCookieName);
    }
}

DoNotExtendAuthenticationAttribute необходим для эффективного отключения форм, использующих логику скользящего истечения срока действия.

Для вашей маршрутизации обязательно используйте SessionlessHandler, чтобы он не непрерывно расширял Session.

  • 0
    Но если вы сделаете это, сеанс сбрасывается каждый раз, когда JavaScript делает вызов на сервер ...
  • 0
    Обновлен, чтобы прояснить это @ FranciscoMárquezChaves и как его избежать.
0

Вы можете попробовать добавить событие таймера с ScriptManager и тиков таймера события вы можете проверить свой статус. если сессия имеет значение, тогда продолжайте, если не дайте им сообщение или что вы хотите.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню