2009-09-03 4 views
0

Когда пользователи регистрируются на моем веб-сайте asp.net (через FormsAuthentication), я храню некоторую информацию о них в текущем сеансе, такую ​​как их UserId, FirstName и другие очень простые переменные, которые мне нужны часто на разных веб-страницах.Сессия сеанса Asp.net до FormsAuthentication

Проблема в том, что даже если таймаут сеанса установлен на длиннее тайм-аута FormsAuthentication, я заметил, что иногда текущий сеанс сбрасывается (т.е. session = null).

1) Я не понимаю, почему это происходит. Есть идеи?

2) Когда это произойдет, пользователи все еще вошли в систему (FormsAuthentication еще не приурочен), но их текущий сеанс больше не содержит данных. То, что я хотел бы сделать, это то, что, когда текущая сессия заканчивается, их попросят снова войти в систему. Для этого мне нужно будет определить тайм-аут сеанса и, когда это произойдет, вывести их из системы. Как это может быть сделано?

3) Это кажется немного излишним. Не могу ли я просто сохранить все, что храню в сеансе (UserId, FirstName и т. Д.) Непосредственно в FormsAuthentication? если да, то как? Таким образом, у меня будет доступ к этим значениям, пока они все еще будут входить в систему, независимо от текущего сеанса (который в этом случае больше не будет использоваться). Вы видите что-то не так с этой логикой? Если нет, как это можно сделать?

+0

Dupe? http://stackoverflow.com/questions/648992/session-timeout-in-asp-net –

+0

Dupe? http://stackoverflow.com/questions/316172/session-timeout-asp-net –

+0

Вы получаете информацию, используя HttpContext.Current.User ?? –

ответ

0

Я думал, что UserID был фактически хранится в системе членства? Не можете ли вы получить достаточно информации от HttpContext.Current.User?

Свойства профиля можно использовать для хранения других фрагментов информации. См. this page для получения дополнительной информации.

1

Мы столкнулись с такой же проблемой, и причина в том, что FormsAuthentication и Session - это две разные вещи. FormsAuth устанавливает cookie и cookie с каждым запросом, но ваш сеанс может быть разорван, если рабочий процесс IIS перезагрузится или сработает и восстановится, или IIS перезагрузится. Ваш файл cookie для FormsAuth остается в живых, но ваша сессия не будет. Вот почему OnAuthenticate вам нужно просто воссоздать сеанс, если значения сеанса отсутствуют. Один из них необходим, если накладные расходы.

проверить это FormsAuthenticationModule.

Это позволит вам проиндексировать ваши значения сеанса, если они не инициализированы, вы должны проверить и инициализировать этот код в случае, если сеанс может быть уничтожен.

0

Вы запустили голову в общую ловушку, смешивая функции провайдера asp.net с функцией (сеансом), которую они разработали для замены. лол.

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

Смежные вопросы