Что является наиболее эффективным способом обработки истекшего сеанса с ASP.NET 2.0 - PullRequest
3 голосов
/ 14 октября 2008

На сайте мы строим. Мы должны иметь возможность перенаправить пользователя на страницу по умолчанию, когда его сеанс закончится.

На первый взгляд, мы использовали Session_End с Response.Redirect для этой работы.

Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
    Response.Redirect("~/global/exit.aspx")
End Sub

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

Каков наиболее эффективный способ обработки сеанса, заканчивающегося ASP.NET 2.0?

Ответы [ 3 ]

3 голосов
/ 15 октября 2008

Мы добавили следующий код в файл global.asax.cs:

 private void IsAuthenticated()
    {
        string vFileName = Path.GetFileName(HttpContext.Current.Request.Path);
        string vExt = Path.GetExtension(vFileName).ToLower();
        if ((vFileName != "Login.aspx") && (vExt == ".aspx"))
        {
            if (HttpContext.Current.Session["LoggedIn"] == null)
            {
                HttpContext.Current.Response.Redirect("~/Login.aspx");
            }
        }
    }
    void Application_PostAcquireRequestState(object sender, EventArgs e)
    {
        IsAuthenticated();
    } 

NS: Первая строка в нашем глобальном файле .asax:

<%@ Application  Inherits="???.Global" Language="C#" %>
2 голосов
/ 14 октября 2008

Вы можете использовать метод session_end, так как это не вызываемый пользователем метод, он запускается ASP.NET и ответ недоступен, так как он не является частью запроса.

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

То, что я сделал раньше, - это поместил эту логику проверки в главную страницу "RestrictedPage.master", которая использовалась для всех страниц, относящихся к сеансу. Если сеанс потерян, он перенаправляет.

2 голосов
/ 14 октября 2008

Мы обработали это, проверив, существуют ли данные сеанса в Application.Begin_Request для страниц, которые были специфичны для пользователя, и если они не перенаправили пользователя на страницу входа или домашнюю страницу.

...