Проблема: контроль времени ожидания сеанса - PullRequest
0 голосов
/ 27 сентября 2011

Моя сессия обновляется каждые 20 минут.Я установил тайм-аут на 300 минут, но все же он возобновляется, вероятно, потому что пул приложений перезагружается.

Я храню UserId, который является Guid in Session и возвращает ноль.Проблема в том, что когда я использую членство, используя

Membership.GetUser().ProviderUserKey

, все работает нормально.Но, очевидно, это делает вызов базы данных.Как я могу предотвратить возникновение этой проблемы?Почему Membership.GetUser (). ProviderUserKey успешно, а Session - нет?

Ответы [ 3 ]

3 голосов
/ 27 сентября 2011

Чтобы завершить ответы Яна и Нейла, вы должны взглянуть на web.config и установить оба тайм-аута ( sessionState и аутентификация )

<sessionState timeout="300"/>

Тайм-аут Sessionstate указывает количество минут, в течение которых сеанс может простаивать, прежде чем его прервать. По умолчанию установлено значение 20.

<authentication mode="Forms">
  <forms loginUrl="Login.aspx"  timeout="300" />
</authentication>

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

1 голос
/ 27 сентября 2011

Ваш сеанс может быть еще жив (если вы установите его на 300 минут), но членство в ASP.NET может истечь?

Вы также увеличили время ожидания аутентификации?

<authentication mode="Forms">
  <forms loginUrl="Login/" timeout="180"/>
</authentication>
0 голосов
/ 27 сентября 2011

Вы смешиваете аутентификацию и сессию.Это две совершенно разные концепции.GetUser() возвращает пользователя, прошедшего аутентификацию, из вашего MemberShipProvider.

Время ожидания сеанса и аутентификации различно, поэтому допустимо, что время сеанса истекло, но пользователь все еще аутентифицирован.

...