0

Я пытаюсь перенаправить пользователя на другую страницу, когда заканчивается сеанс.Как перенаправить на конец сеанса

В результате этого кода «Ссылка на объект не установлена ​​в экземпляр объекта». исключение

void Session_End(Object sender, EventArgs E) 
{ 
    HttpContext.Current.Response.Redirect("/"); 
} 

любая идея, как это сделать?

+0

Когда вы получаете этот триггер, вы не имеете никакого контакта с пользовательской страницей, поэтому Отказ равен нулю. Попробуйте сделать какой-то вызов javascript, чтобы проверить, не потерял ли пользователь свою сессию. Его сложно, потому что каждый вызов может снова активировать обновление сеанса. – Aristos

+0

Вы подключаетесь к событию, которое не имеет ничего общего с запросом страницы, поэтому ваш HttpContext.Current (вероятно) содержит нулевую ссылку. Что конкретно вы хотите? Вы хотите реализовать функцию выхода из системы или, возможно, определить, когда пользователь находится за пределами сеанса? Это разные ситуации с разными ответами, каждый из которых отличается от приведенного выше кода. –

+0

http://stackoverflow.com/questions/4453365/session-end-in-global-asax-cs-not-firing-using-forms-authentication ... проверить, как форум –

ответ

1

Session_End увольняется изнутри сервером на основе внутреннего таймера. Из-за этого не возникает HttpRequest, связанного, когда это произойдет. Вот почему Response.Redirect или Server.Transfer не имеет смысла и не будет работать.

Я вижу в прошлом обходные пути об этом, но никогда не пробовал, вы должны сделать базовый класс, который наследует каждая страница. OnInit в базовом классе добавьте это. Базовый класс наследует UI.Page. Если вы не используете логику базового класса, вы должны добавить эту логику на каждую страницу, которая не является приятной.

protected override void OnInit(System.EventArgs e) 
    { 
     Response.AddHeader("Refresh",Convert.ToString((Session.Timeout * 60) + 5));  

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

Страница должна быть обновлена ​​через 5 секунд после того, как сеанс истек, с, если вы поймаете, что сессия является новым и вы будете перенаправлены.

Смежные вопросы