asp.net 'Запомнить меня' больше не работает с аутентификацией с помощью форм

У меня есть два веб-сайта с самописными поставщиками членства, которые размещены на одном сервере в одной сети в разных веб-приложениях и в разных пулах приложений.

Раньше у меня была проблема, что я не мог одновременно войти на оба сайта. Благодаря сообщению Реми это теперь работает, мне пришлось добавить name-атрибут к элементу forms.
Но теперь у меня есть проблема, что опция «запомнить меня» элемента управления входом asp перестала работать. Пользователь выходит из системы после обычного тайм-аута сеанса.

Атрибуты аутентификации в файле web.config выглядят следующим образом:

<authentication mode="Forms" >
  <forms loginUrl="~/UserMgmt/Login.aspx" timeout="400000" slidingExpiration="true" name="NameOfTheSite"/>
</authentication>

Также я установил имя файла cookie для аутентификации форм на разные имена.

Есть ли что-то еще, что я должен добавить, чтобы функция запоминания работала?

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

Обновление 1
Спасибо Джейсону Кили за решение этой проблемы. Я бы никогда его не нашел. А пока я нашел соответствующую информацию в msdn. В Как: настроить MachineKey в ASP.NET 2.0 в разделе Написано «Рекомендации по развертыванию веб-фермы»:

Если вы хотите изолировать свое приложение от других приложений на том же сервере, поместите <machineKey> в файл Web.config для каждого приложения на каждом сервере в ферме. Убедитесь, что вы используете отдельные значения ключей для каждого приложения, но дублируете ключи каждого приложения на всех серверах фермы.


person HCL    schedule 18.01.2011    source источник
comment
Это то, что у меня есть. Вы удалили существующие файлы cookie?   -  person Remy    schedule 21.01.2011
comment
@Remy: Нет, не сработало, но в любом случае это была хорошая идея!   -  person HCL    schedule 21.01.2011
comment
что произойдет, если вы измените тайм-аут примерно на 7 дней (10080) вместо 277+ (400000) дней?   -  person Mark Schultheiss    schedule 27.01.2011
comment
@Mark Schultheiss: Нет, я пробовал, и это не помогло.   -  person HCL    schedule 27.01.2011


Ответы (3)


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

Посетите раздел machineKey http://msdn.microsoft.com/en-us/library/ff649308.aspx

Вот что-то, что сгенерирует для вас раздел machineKey http://www.qualitydata.com/products/aspnet-membership/help/configuration/no-machinekey.aspx

person Jason Kealey    schedule 28.01.2011
comment
Я должен признать, что не понимаю, что означает ваш ответ (потому что я мало знаю об asp.net). Что такое рабочий процесс и почему он перезапускается. Это процесс, в котором IIS размещает Интернет? Если да, то почему эта проблема возникает только тогда, когда у меня есть два поставщика членства. Если у меня только один, все работает нормально. Кроме того, если я читаю связанные документы, все они говорят, что я должен настроить раздел машинного ключа, если мое приложение работает в веб-ферме или если я хочу поделиться логином между приложениями. Но я не хочу ни того, ни другого, явно не разделяя логин между приложениями. - person HCL; 29.01.2011
comment
Учитывая тот факт, что отключение проверки заставляет все работать, я считаю, что каждый раз, когда пул приложений (рабочий процесс IIS) сбрасывается, он генерирует новый ключ, который он использует для проверки файлов cookie пользователя, когда они возвращаются на ваш сайт. Он может сбрасываться из-за бездействия или по ряду причин. (И новый ключ не может расшифровать содержимое предыдущего посещения, так как он не такой, как исходный). Попробуйте добавить что-нибудь, созданное с помощью вышеуказанного инструмента, и сообщите нам, работает ли он. - person Jason Kealey; 31.01.2011
comment
Я считаю, что это наиболее вероятное решение, учитывая факты. - person Greg; 01.02.2011
comment
+1, примите и щедро! Теперь, прочитав нужные документы, все вроде бы ясно, но без правильной ссылки я бы не нашел решения. Спасибо. - person HCL; 01.02.2011

Попробуйте установить доменное имя, чтобы быть уверенным, что cookie запоминания установлен правильно во всех случаях.

<forms  path="/" domain="nameof.com" ...the rest
person Aristos    schedule 28.01.2011
comment
+1 Не повезло и с этим, но указание домена и, в частности, установка пути было значимой попыткой. - person HCL; 29.01.2011
comment
@HCL также проверьте настройки анонимных файлов cookie. - person Aristos; 29.01.2011

Тайм-аут cookie также ограничен IIS и по умолчанию составляет около 20 минут. Чтобы изменить это:

  1. Откройте диспетчер IIS.
  2. Щелкните правой кнопкой мыши свой сайт и выберите свойства.
  3. Выберите вкладку ASP.NET и нажмите «Изменить конфигурацию».
  4. Выберите вкладку «Аутентификация».
  5. Выберите Включить скользящее истечение срока.
  6. Установите более длительное время ожидания cookie. Чтобы установить 30 дней, введите 30.00: 00: 00.
  7. Нажмите ОК и выйдите из диспетчера IIS.

введите описание изображения здесь

person JBrooks    schedule 28.01.2011