2009-03-17 1 views
7

Я использую FormsAuthentication и ASP.Net SqlMembership Provider. Я хотел бы предоставить функциональность для перенаправления на страницу Login, когда срок действия основного сеанса истек. Я поставил следующий блок кодов в свой BasePage OnInit. Насколько я проверял, он всегда переадресовывает страницу входа в систему, даже если я предоставил правильный UserID и пароль. По праву, это должно занять меня по умолчанию. Это очень срочно, и любая помощь будет очень оценена.Как перенаправить на страницу входа в систему, когда сеанс истек (ASP.NET 3.5 FormsAuthen)

С уважением, Thurein

if (Context.Session != null && Session.IsNewSession && this.Request.IsAuthenticated) 
     { 
      string cookieHeader = Request.Headers["Cookie"]; 
      if (cookieHeader != null && cookieHeader.IndexOf("ASP.NET_SessionId") >= 0) 
      { 


        HttpContext.Current.Session.Abandon();      
        FormsAuthentication.SignOut();       
        Response.Redirect(FormsAuthentication.LoginUrl);           

      } 
     } 
+0

Разве эта функция не встроена в аутентификацию форм? –

+0

@ Rob: Да, это так. –

ответ

19

Вам не нужно никакого специального кода для этой функции, он поддерживает Framework. Просто настройте его в web.config:

<authentication mode="Forms"> 
    <forms defaultUrl="~/Default.aspx" 
     loginUrl="~/Login.aspx" 
     slidingExpiration="true" 
     timeout="60" /> 
</authentication> 

При вышеуказанной конфигурации, пользователь всегда будет перенаправлен на страницу Login.aspx, когда истечет срок их сессии. Существует тайм-аут в течение 60 минут, а истечение срока действия означает, что тайм-аут увеличивается каждый раз, когда пользователь делает запрос в веб-приложение, поэтому, если он останется активным, сеанс не истечет. Такая конфигурация дает вам еще одно преимущество перед тем, что вы пытались сделать - как только пользователь войдет в систему, он будет автоматически перенаправлен обратно на исходный запрос. И вы всегда можете переопределить и настроить это поведение.

+0

Hi Pawel Krakowiak, Я ДЕЙСТВИТЕЛЬНО оцениваю вас за ваш ответ. :) На самом деле, я уже сделал те же конфигурации, о которых вы говорили выше. :(Но я не знаю, что у меня на уме, чтобы сделать собственное кодирование, чтобы удовлетворить уже существовавшую функциональность. С уважением, Kyaw Thurein –

+0

Предположим, что это происходит, когда они нажимают кнопку «Сохранить» на форме, которая делает postback, они направляются на страницу входа в систему, а затем вступают в систему и возвращаются к исходному ресурсу. Будет ли завершена обратная передача, чтобы данные формы могли обрабатываться как обычно? – AaronLS

+1

@aaronls: Нет, данные будут потеряны. запрашиваемый URL-адрес запоминается. –

13

Pawel's answer является частично правильным, но вам также необходимо установить время жизни Session на значение, превышающее срок службы cookie для проверки подлинности. Значение аутентификации форм timeout влияет только на время жизни файла cookie аутентификации. В примере, который он предоставил, срок службы cookie аутентификации составляет 60 минут, но продолжительность сеанса по умолчанию составляет 20 минут. Если пользователь покинул свою машину более 20 минут, их данные сеанса будут отброшены, последующие попытки ссылаться на значение, сохраненное в сеансе, приведут к тому, что будет выбрано исключение (например, System.NullReferenceException при попытке выполнить .ToString() или приведение).

Вы можете установить это глобально в вашем приложении, настроив sessionState настройки в файле web.config:

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

Добавление пять или десять минут, чтобы тайм-аут сеанса обеспечивает хороший буфер.

+0

Спасибо за дополнительное объяснение. Это действительно важно, когда вы используете переменные сеанса. У меня просто есть привычка параноидально проверять их существование/ценность, прежде чем я попытаюсь их использовать. ;) –

+1

Я знаю ... стыдно, что у них нет указателяIfSessionExpired = "true". – Kev

+0

Hi Kev, Я действительно благодарю вас за ваш совет. С уважением, Thurein –

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