Session_End в Global.asax.cs не запускается с использованием аутентификации форм - PullRequest
1 голос
/ 15 декабря 2010

У меня есть приложение asp.net 4.0, которое использует проверку подлинности с помощью формы, установленной на время ожидания 45 минут. Я хотел бы перенаправить пользователя на страницу тайм-аута, когда сеанс истек. Может кто-нибудь сказать мне, как это сделать? Я использую .net 4.0.

web.config имеет:

<authentication mode="Forms">
  <forms name=".ASPXAUTH" loginUrl="~/Login.aspx"
    defaultUrl="~/Default.aspx" protection="All" timeout="45"
    requireSSL="false">
  </forms>
</authentication>

Файл Global.asax.cs содержит:

void Session_End(object sender, EventArgs e)
{
    Response.Redirect("~/Timeout.aspx");
}  

Ответы [ 3 ]

4 голосов
/ 15 декабря 2010

Невозможно выполнить перенаправление в методе Session_End.Он не выполняется в результате запроса, поэтому у него нет объекта Response и нет ответа на перенаправление в любом месте.

Невозможно что-либо сделать в браузере в результатесеанс истекает.Протокол HTTP ориентирован на запросы, поэтому невозможно отправить сообщение с сервера в браузер без запроса его браузером.

Браузер просто не может определить, истек ли сеанс или нет,Если вы опросите сервер, чтобы проверить, не истек ли сеанс, он сохранит сеанс в живых, победив цель тайм-аута.

Вы можете выполнить перенаправление через 45 минут, используя только клиентский скрипт:

window.setTimeout(function() {
  window.location.href = '/Timeout.aspx';
}, 1000*45*60);

Однако перенаправление будет выполняться только на основе времени, прошедшего с того момента, когда это окно браузера последний раз связывалось с сервером.Если у вас есть несколько окон браузера для одного и того же сеанса, возможно, что сеанс фактически не истек.

3 голосов
/ 15 декабря 2010

Как реализовано ваше состояние сеанса?Session_End работает только при использовании InProc.

См. http://www.eggheadcafe.com/articles/20021016.asp

0 голосов
/ 24 марта 2016

В MVC вы можете добавить этот код в _ViewStart.cshtml

_ViewStart.cshtml:

@{
     Response.AddHeader("Refresh",Convert.ToString((Session.Timeout * 60) + 5));      

     if(Session.IsNewSession)  
         Response.Redirect(“Logout.aspx");// or another page which you want.
}

Как перенаправить в конце сеанса

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