Как я могу обработать обратную передачу после окончания сеанса на сайте ASP.NET? - PullRequest
3 голосов
/ 18 марта 2011

У меня есть простой сайт ASP.NET 4. Я использую проверку подлинности с помощью форм. У меня время ожидания сеанса установлено на 20 минут. Также, когда пользователь аутентифицируется, я устанавливаю срок действия AuthenticationTicket через 20 минут. Так что нормально все работает нормально. Если время бездействия превышает 20 минут, и пользователь запрашивает страницу на сайте, он перенаправляется обратно на страницу входа в систему, как я и ожидал.

Однако предположим, что пользователь находится на странице, содержащей форму. Затем они ждут 25 минут. Затем они идут, чтобы отправить форму. Вместо того, чтобы перенаправляться обратно на страницу входа, сайт пытается выполнить обратную передачу, и я сразу же получаю ошибки, потому что в обратной передаче есть код, который пытается получить информацию из сеанса.

Похоже, ASP.NET не перенаправляет обратно на вход в систему при обратной передаче, если срок действия билета AuthenticationTicket и Session истек. Как я могу справиться с этим? Надеюсь, мне не нужно писать специальный код на каждой странице.

ДОБАВЛЕНО: код web.config

<location path="ForgotLogin.aspx">
   <system.web>
      <authorization>
         <allow users="*" />
      </authorization>
   </system.web>
</location>
<system.web>
   <authentication mode="Forms">
      <forms loginUrl="~/Login.aspx"></forms>
   </authentication>
   <authorization>
      <deny users="?" />
   </authorization>
</system.web>

Corey

Ответы [ 3 ]

1 голос
/ 18 марта 2011

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

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

1 голос
/ 22 марта 2011

Я думаю, у вас разные тайм-ауты для вашего сеанса и файла cookie для аутентификации.Ситуация, которую вы описываете, напоминает сеанс с тайм-аутом, который все еще действителен.Посмотрите на эту статью .Особенно раздел У вас есть зависимость между токеном аутентификации пользователя и его сеансом? для вашей ситуации.

0 голосов
/ 18 марта 2011

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

Какую информацию вы храните в сессии?

Если эта информация относится к странице, я бы рекомендовал хранить ее в ViewState или ControlState.Если вы храните информацию, связанную с пользователем.Я бы создал IHttpModule, поэтому всякий раз, когда аутентифицированный пользователь вызывает ваш веб-сайт, а значения сеанса равны нулю, вы воссоздаете их до того, как пользователь переходит на любую страницу.

...