Обработка тайм-аута сессии в asp.net с использованием Javascript - PullRequest
0 голосов
/ 19 декабря 2009

По сути, я хочу быть в состоянии отловить, когда пользователь разрешает свое время ожидания сеанса, а затем нажимает на что-то, что в конечном итоге вызывает асинхронную обратную передачу. Я понял, что если я помещу этот код в мой Session_Start (в Global.asax), то я могу отловить обратную передачу, которая произошла во время тайм-аута сеанса:

    With HttpContext.Current
        If TypeOf .Handler Is Page Then
            Dim page As Page = CType(.Handler, Page)
            If page IsNot Nothing AndAlso page.IsPostBack Then
                'Session timeout
            End If
        End If
    End With

Это отлично работает. Мой вопрос заключается в том, что я хотел бы иметь возможность вставить некоторый JavaScript в Response, а затем вызвать Response.End (), чтобы остальная часть приложения не завершила выполнение. Проблема в том, что когда я пытаюсь Response.Write("<script ... "), а затем Response.End(), тогда javascript не записывается в поток ответов. Я уверен, что в приложении есть другие места, где я могу безопасно написать Javascript в Response, но я не могу позволить остальной части приложения работать, так как при попытке доступа к объектам сеанса произойдет ошибка.

Подводя итог: мне нужно вставить javascript в ответ в событии Session_Start в Global.asax

Примечание: вы можете задаться вопросом, почему я не делаю этого в Session_End ... мы не используем сессии InProc, и поэтому Session_End не вызывается ... но это не относится к делу ... просто хотел поясните, почему я делаю это в Session_Start.

1 Ответ

1 голос
/ 19 декабря 2009

Запись в поток ответов вне HttpHandler, как правило, не очень хорошая идея; в некоторых случаях это может сработать, но это не так, как задумано.

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

Другим вариантом будет использование перезаписи URL-адреса для перенаправления входящего запроса на страницу, которая генерирует необходимый вывод сценария.

...