Что может вызвать проблемы с файлами cookie ASP.NET FormsAuthentication, кроме отключения файлов cookie? - PullRequest
6 голосов
/ 16 августа 2010

Люди сообщают о проблемах при входе на один из наших сайтов ASP.NET.Когда я проверяю журналы IIS, создается впечатление, что куки-файлы FormsAuthentication не кэшируются их браузерами после входа в систему.

Я не думаю, что это так просто, как «пользователь настроил свой браузер так, чтобы он не принимал куки-файлы».'потому что:
a) Если бы файлы cookie в целом не работали для их браузера, они бы никогда не достигли такого уровня, как в процессе - файлы cookie сеанса ASP.NET, например, работают нормально.
b) Как правило, это не те пользователи, которые бы даже знали, как отключить куки.

Так что я думаю, что это должно быть что-то еще.Какие проблемы могут привести к тому, что файлы cookie ASP.NET FormsAuthentication перестают работать, кроме пользователей , которые просто настраивают свои браузеры на отклонение файлов cookie?

edit: например Этот ответ на другой вопрос предполагает, что иногда файлы cookie FormsAuthentication сбрасываются из-за их слишком большого размера - возможно, кто-то может пролить свет на это?

edit: файл cookie FormsAuthentication для одного из наших сайтов составляет 233 байта - это немного больше?Можно ли сделать его меньше?Может быть, это поможет.

edit: я заметил, что код использует FormsAuthentication.SetAuthCookie() и Response.Redirect() вместо FormsAuthentication.RedirectFromLoginPage() - это может быть связано?

Ответы [ 7 ]

4 голосов
/ 20 октября 2010

У меня была похожая проблема (не с файлом cookie для проверки подлинности с помощью форм, но с файлом cookie с липким грузом), потому что на сервере не было правильной конфигурации времени / часового пояса, поэтому были случаи, когда дата окончания срока действия файлов cookie была выше, чем текущее время в машине пользователя.

см. Здесь: Как работают значения с истекшим сроком действия для файлов cookie и кэширования?

надеюсь, это поможет

2 голосов
/ 21 октября 2010

Используете ли вы несколько доменов для общения с одним и тем же веб-приложением?Помните, что файлы cookie относятся к конкретному домену: www.mydomain.com <> www.mydomain.net <> my.domain.net.

Удар в темноте, есть ли у вас машинные ключи в вашем web.configs?

2 голосов
/ 20 октября 2010

Может ли имя веб-сервера или часть имени DNS содержать подчеркивание?

например:

www2_http.mydomain.com

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

1009 * привет *

2 голосов
/ 19 октября 2010

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

Разница между RedirectFromLoginPage() и SetAuthCookie, за которой следует Response.Redirect(), заключается в том, что первое работает и в том случае, если cookie-файлы отключены (фактически он использует параметр строки запроса для отслеживания аутентифицированных пользователей).

2 голосов
/ 16 августа 2010

Возможно ли, что пользователь обращается к вашему веб-серверу через 2 разных домена? Например, если я захожу на www.foo.com и получаю файл cookie для аутентификации, а затем перенаправляю на сайт www.bar.com, запрос, отправленный на сайт www.bar.com, безусловно, не будет содержать файл cookie, установленный www.foo.com. .

Эта проблема также может возникнуть, если вы установите cookie на htp: //login.foo.com, а затем перенаправите на htp: //content.foo.com. Однако я полагаю, что файл cookie можно настроить с использованием подстановочного знака, чтобы он применялся к * .foo.com.

Редактировать: намеренно с ошибкой "http", чтобы в этом ответе не было реальных кликабельных ссылок мусора. :)

1 голос
/ 16 августа 2010

Время ожидания простоя - они входят в систему, затем какое-то время ничего не делают, а затем снова пытаются получить доступ к сайту?Вы можете проверить это.И посмотрите, установлен ли тайм-аут на скользящий тайм-аут (например, 20 минут после последнего запроса) или фиксированный тайм-аут (например, 20 минут после входа в систему).Я думаю, что скользящий таймаут не является настройкой по умолчанию.

0 голосов
/ 20 октября 2010

Попробуйте выполнить следующие действия.

http://blogs.msdn.com/b/rahulso/archive/2007/01/17/troubleshooting-cookies-a-case-study.aspx

Я написал это давно, но если вы внимательно следите за этим, велики шансы, что вы найдете основную причину.

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

Рахул

www.dotnetscraps.com

...