Постоянство аутентификации MONO / ASP.NET - PullRequest
1 голос
/ 14 июля 2011

Я развертываю приложение ASP.NET MVC 2, используя Apache / mod_mono / MONO (2.8.1), в котором используется встроенная среда аутентификации ASP.NET.

Когда я перезагружаю Apache или используюПанель управления mod_mono для перезапуска процесса моно-сервера, пользователи вышли из системы.Я не хочу, чтобы это происходило.

Я использую собственные провайдеры Profile / Membership / Role (поддерживаемые базой данных Redis), и в настоящее время они имеют минимальную реализацию.Однако я не вижу, в чем здесь заключается моя проблема, но я упускаю что-то очевидное?

Я заметил, что файл cookie .MONOAUTH изменяет значение при повторном входе пользователя в систему, поэтому я полагаю, что требуется некоторая настойчивостьслучиться, что не происходит.

Любые решения или ссылки на соответствующую документацию будут великолепны!

Ответы [ 2 ]

3 голосов
/ 15 июля 2011

Решение: установите validationKey и decryptionKey вручную:

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

3 голосов
/ 14 июля 2011

ПРИМЕЧАНИЕ. Я не уверен, что информация, представленная ниже, отличается при использовании поставщика членства - возможно, состояние сеанса сохраняется самим поставщиком членства.

Вероятно, вы 'повторно использовать "в процессе" хранения состояния сеанса.Это означает, что всякий раз, когда вы перезапускаете процесс веб-сервера, вы очищаете всю информацию о сеансе, хранящуюся в области памяти процесса веб-сервера.

Чтобы избежать удаления информации о сеансе, вы можете перейти к использованию внешнегосервера состояний сеанса, работающего как служба в памяти (см. ниже для версии Mono) или на SQL Server.В противном случае есть также ряд неофициальных провайдеров нестандартных хранилищ сеансов, которые используют альтернативные механизмы хранения (например, MongoDB и т.http://manpages.ubuntu.com/manpages/gutsy/man1/asp-state2.1.html

В качестве первого шага взгляните в своем файле web.config на свойство system.web -> sessionState.Если он установлен в mode = "InProc", то это ваша проблема.Это должно выглядеть больше как:

<sessionState 
 mode="StateServer"
 stateConnectionString="tcpip=server:port"
 stateNetworkTimeout="number of seconds"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...