как проверить сессию при старте на главной странице или в global.asax - PullRequest
1 голос
/ 12 января 2011

я новичок в аутентификации asp.net и сессиях

Я хотел бы знать, как сохранить сессию на главной странице или в global.asax и как очистить сессию

как лучше обрабатывать тайм-аут сеанса, перенаправляя на страницу

это мои настройки сеанса web.config

<sessionState mode="InProc" cookieless="false" timeout="1"></sessionState>

код на моей главной странице

 if (Request.Url.AbsolutePath.EndsWith("SessionExpired.aspx", StringComparison.InvariantCultureIgnoreCase))
    {
        HtmlMeta meta = new HtmlMeta();
        meta.HttpEquiv = "Refresh";
        meta.Content = "7; URL=./Login.aspx";
        Page.Header.Controls.Add(meta);
    }
    else
        HttpContext.Current.Response.AppendHeader("Refresh", Convert.ToString((Session.Timeout * 60)) + "; Url=./Public/SessionExpired.aspx");

Ответы [ 2 ]

1 голос
/ 12 января 2011

Вы можете очистить сеанс вручную, вызвав

   Session.Abandon();
   System.Web.Security.FormsAuthentication.RedirectToLoginPage();

Об истечении сеанса: Выполните этот код где-нибудь (как предложил VinayC, MasterPage или в классе, производном от System.Web.UI.Page, который служит в качестве базового класса для всех ваших страниц содержимого (то есть измените производную от System.Web.UI.Page во всех ваших кодах ниже). файлы из страниц aspx в производную от вашего пользовательского класса)

 if (Request.Url.AbsolutePath.EndsWith("SessionExpired.aspx", StringComparison.InvariantCultureIgnoreCase))
    {
        // your html redirect code here
    }
    else
        Response.Redirect("~/Public/SessionExpired.aspx");
1 голос
/ 12 января 2011

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

  1. Используйте абстрактный класс, производный от System.Web.UI.Page, в качестве базового класса для всех страниц. Допустим, мы называем этот класс BasePage.
  2. Добавьте виртуальный метод, такой как IsRefreshHeaderNeeded - реализация по умолчанию вернет true. Метод будет вызван на этапе PreRender BasePage для добавления в ответ фактического заголовка обновления.
  3. На странице SessionExpired IsRefreshHeaderNeeded будет переопределено для возврата false. (Подобное может понадобиться на таких страницах, как логин или страницы, которые не нуждаются в поддержке сеанса).
  4. Обновление заголовка / мета для перенаправления на страницу входа будет добавлено на самой странице SessionExpired (на самом деле это логика на странице, зачем размещать ее в глобальном месте). На странице SessionExpired будет, конечно, ссылка для использования для ручной навигации по странице входа (в случае, если перенаправление не работает).

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

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

...