2011-01-12 2 views
1

Я новичок в проверке подлинности форм asp.net и сессийкак проверить сеанс при запуске в MasterPage или в global.asax

я хотел бы знать, как сохранить сессию в MasterPage или в global.asax и как очистить сессию

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

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

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

код в моем MasterPage

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"); 

ответ

1

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

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

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

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

1

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

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

О таймаута сессии: Выполнить этот код где-то (как VinayC предложил, MasterPage или в класс, производный от System.Web.UI. Страница, которая служит базовым словом для всех ваших страниц контента (что означает изменение вывода из 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"); 
Смежные вопросы