2010-01-10 2 views
1

Я использую аутентификацию формы в ASP.NET 3.5.ASP.NET App Pool Reciclying log off user

Я заметил, что, когда мой пул приложений перерабатывается (каждые 1,5 часа), пользователи, прошедшие проверку подлинности, аутентифицируют аутентификацию форм (с файлом auth cookie), и они должны повторно войти в систему.

Как этого избежать?

ответ

3

У вас установлен режим сеанса InProc, что означает, что он привязан к этому экземпляру W3WP и перезапущен. (По крайней мере, на IIS6, не уверены в IIS7)

Вместо этого используйте StateServer или SqlServer.

Check the MSDN Documentation about sessionState, особенно статья о Session-State Modes.

Edit: Паулу сделали хороший комментарий: InProc сессии могут хранить почти каждый объект, в то время как StateServer и SqlServer требуют, чтобы быть Serializable. Кроме того, я хотел бы добавить, что они медленнее - вы не можете бить скорость InProc Sessions, поскольку они хранятся в памяти. С другой стороны: использование State/SqlServer принесет пользу вам, если вам когда-либо понадобится добавить балансировку нагрузки к вашему приложению. Для всех режимов существуют плюсы и минусы, вы должны выбрать яд здесь.

+1

Правда, но с использованием StateServer или SqlServer государство-поставщика, уменьшить возможность хранить любой объект в сессии. Таким образом могут храниться только объекты Serializable. И в зависимости от приложения, это может иметь огромное влияние на него. –

+0

Очень верно. Это также может значительно снизить производительность - Yout должен выбрать ваш Poison здесь. –

+0

Я также искал решение этой проблемы и не нашел, что настройка режима сеансового режима для справки «StateServer» не найдена. Моя информация о сеансе (т. Е. Все в HttpContext.Current.Session) была сохранена, но HttpContext.Current.User был нулевым, а HttpContext.Request.IsAuthenticated был ложным. – Kyle