Надеюсь, вы уже решили эту проблему, но в случае, если кто-то другой столкнется с такими же проблемами, я отвечал за отладку некоторого кода, написанного с использованием того же шаблона, и вот несколько соображений:
1) Билет формы имеет тайм-аут в своем значении. Большая часть примера кода там жестко кодирует этот тайм-аут вместо извлечения из конфигурации проверки подлинности форм, поэтому, если вы просто просматриваете свой web.config, все может выглядеть хорошо, но ваш специальный код безопасности игнорирует значение web.config. Просмотрите свой код для «нового FormsAuthenticationTicket» и посмотрите, что вы делаете в течение срока действия.
2) В cookie-файле формы установлен таймаут. Некоторые из примеров кода там жесткие коды этого тайм-аута. Посмотрите, не установлено ли у вас cookie. Истекает срок действия файла cookie безопасности. (Пользовательская аутентификация имеет тенденцию собирать вручную больше кода, чем вы ожидаете, потому что методы FormsAuthentication не предоставляют метод make-a-cookie-with-userdata, и вы обычно хотите использовать userdata для хранения некоторой информации, например ролей в)
3) Некоторые клиенты не будут устанавливать cookie при перенаправлении ответа. И иногда, даже если они это сделают, вы получите печенье, отличное от того, которое вы установили. Например, если вы в какой-то момент изменили путь к приложению или домен, у пользователя может быть два действительных файла cookie, и вы удаляете только один из них, когда пытаетесь снова войти в него здесь. Теперь этот код в основном гласит: «У пользователя есть некоторая информация о сеансе, и он вошел в систему, но в его сеансе не было участника, которого я ожидал, поэтому я перенаправляю его для повторного входа». Что ж, если они не слушают ваш файл cookie для проверки подлинности или имеют файл cookie для проверки подлинности, которого вы не ожидаете (возможно, вы изменили значения своего домена или пути в какой-то момент, и у них все еще установлен файл cookie / oldpath), это может привести к бесконечному циклу , Я рекомендую обнулить серверную часть сеанса, как только вы обнаружите, что в ней нет нужных вам данных: Session.Clear () - это снижает вероятность того, что вы окажетесь в такой ситуации после перенаправления. (С точки зрения восстановления на стороне сервера без доверия клиенту к поведению на самом деле немного безопаснее пойти дальше и реконструировать основной объект и поместить его в сеанс, но я вижу, как это будет меньше ненадежно.)
Также безопаснее просто выполнить Server.Transfer на страницу входа в систему, а не полагаться на перенаправление изменения cookie для правильной работы. Если вы попадете в цикл перенаправления, server.transfer гарантированно завершит его.