Сессия истекает через 20 минут: в режиме ожидания или нет - PullRequest
4 голосов
/ 26 октября 2010

У меня проблемы с тем, что пользователи теряют данные сеанса при заполнении формы заявки.Похоже, что они теряют состояние сеанса частично через формы заявки.(Проект ASP.NET 4.0 WebForms, IIS 6.0)

Сеанс хранится вне процесса на сервере состояний, поэтому он не изменяет конфигурацию, не перерабатывает домен приложения и т. Д. AFAIK.

<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" timeout="20" />

Я использую Аутентификацию с помощью форм, скользящий срок действия работает правильно, как вы можете видеть из журнала ниже - Вы можете видеть, что срок действия билета правильный и увеличивается как указанный.

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

Я включил некоторые пользовательские журналычтобы попытаться отследить это.При каждом Session_Start пожаре global.asax я что-то регистрирую, а также что-то регистрирую каждый раз, когда кто-то загружает форму приложения или нажимает «Далее», чтобы перемещаться между разделами (в MultiView), когда они проходят через форму приложения.

Вот два примера людей, теряющих свое состояние сеанса.Журнал начинается с даты / времени записи в журнале, а затем с некоторой формулировкой.Вторая дата / время в скобках (после формулировки) - это дата / время истечения срока действия файла cookie FormsAuthentication, полученного из CType(ctx.User.Identity, FormsIdentity).Ticket.Expiration.ToString

. В журнале также регистрируются IP-адрес пользователя и идентификатор сеанса.Я удалил их, прежде чем вставить их сюда, и я могу подтвердить, что IP-адрес и идентификатор сеанса одинаковы для всех записей журнала.

Пример 1:

**[26/10/2010 13:07]    Session started []**
[26/10/2010 13:11]  Application form first Page_Load [26/10/2010 13:31:19]
[26/10/2010 13:13]  App form next clicked, current index is 1 (vwSection1) [26/10/2010 13:31:19]
[26/10/2010 13:14]  App form next clicked, current index is 2 (vwSection2) [26/10/2010 13:31:19]
[26/10/2010 13:15]  App form next clicked, current index is 3 (vwSection3) [26/10/2010 13:31:19]
[26/10/2010 13:20]  App form next clicked, current index is 5 (vwSection4) [26/10/2010 13:31:19]
[26/10/2010 13:20]  App form next clicked, current index is 6 (vwSection5) [26/10/2010 13:31:19]
[26/10/2010 13:20]  App form next clicked, current index is 7 (vwMonitoring) [26/10/2010 13:31:19]
[26/10/2010 13:21]  App form next clicked, current index is 8 (vwInformation) [26/10/2010 13:31:19]
[26/10/2010 13:22]  Application form first Page_Load [26/10/2010 13:41:22]
[26/10/2010 13:25]  App form next clicked, current index is 1 (vwSection1) [26/10/2010 13:41:22]
[26/10/2010 13:26]  App form next clicked, current index is 2 (vwSection2) [26/10/2010 13:41:22]
[26/10/2010 13:26]  App form next clicked, current index is 3 (vwSection3) [26/10/2010 13:41:22]
[26/10/2010 13:28]  App form next clicked, current index is 5 (vwSection4) [26/10/2010 13:41:22]
[26/10/2010 13:28]  App form next clicked, current index is 6 (vwSection5) [26/10/2010 13:41:22]
[26/10/2010 13:28]  App form next clicked, current index is 7 (vwMonitoring) [26/10/2010 13:41:22]
[26/10/2010 13:28]  App form next clicked, current index is 8 (vwInformation) [26/10/2010 13:41:22]
**[26/10/2010 13:28]    Session started [26/10/2010 13:41:22]**
[26/10/2010 13:31]  Application form first Page_Load [26/10/2010 13:51:24]
[26/10/2010 13:31]  App form next clicked, current index is 1 (vwSection1) [26/10/2010 13:51:24]
[26/10/2010 13:32]  App form next clicked, current index is 2 (vwSection2) [26/10/2010 13:51:24]
[26/10/2010 13:32]  App form next clicked, current index is 3 (vwSection3) [26/10/2010 13:51:24]
[26/10/2010 13:32]  App form next clicked, current index is 5 (vwSection4) [26/10/2010 13:51:24]
[26/10/2010 13:32]  App form next clicked, current index is 6 (vwSection5) [26/10/2010 13:51:24]
[26/10/2010 13:32]  App form next clicked, current index is 7 (vwMonitoring) [26/10/2010 13:51:24]
[26/10/2010 13:32]  App form next clicked, current index is 8 (vwInformation) [26/10/2010 13:51:24]

Пример 2:

**[24/10/2010 17:44]    Session started []**
[24/10/2010 17:50]  Application form first Page_Load [24/10/2010 18:10:13]
[24/10/2010 18:00]  App form next clicked, current index is 1 (vwSection1) [24/10/2010 18:20:40]
**[24/10/2010 18:07]    Session started [24/10/2010 18:20:40]**
[24/10/2010 18:08]  App form next clicked, current index is 2 (vwSection2) [24/10/2010 18:20:40]
[24/10/2010 18:10]  App form next clicked, current index is 2 (vwSection2) [24/10/2010 18:20:40]
[24/10/2010 18:10]  App form next clicked, current index is 1 (vwSection1) [24/10/2010 18:30:42]
[24/10/2010 18:10]  App form next clicked, current index is 1 (vwSection1) [24/10/2010 18:30:52]
[24/10/2010 18:10]  App form next clicked, current index is 1 (vwSection1) [24/10/2010 18:30:58]
[24/10/2010 18:12]  Application form first Page_Load [24/10/2010 18:31:35]
[24/10/2010 18:12]  App form next clicked, current index is 1 (vwSection1) [24/10/2010 18:31:35]
[24/10/2010 18:13]  App form next clicked, current index is 2 (vwSection2) [24/10/2010 18:31:35]
[24/10/2010 18:13]  App form next clicked, current index is 2 (vwSection2) [24/10/2010 18:31:35]
[24/10/2010 18:16]  App form next clicked, current index is 3 (vwSection3) [24/10/2010 18:31:35]
[24/10/2010 18:16]  App form next clicked, current index is 5 (vwSection4) [24/10/2010 18:31:35]
[24/10/2010 18:17]  App form next clicked, current index is 6 (vwSection5) [24/10/2010 18:31:35]
[24/10/2010 18:18]  App form next clicked, current index is 7 (vwMonitoring) [24/10/2010 18:31:35]
[24/10/2010 18:18]  App form next clicked, current index is 8 (vwInformation) [24/10/2010 18:31:35]

В первом примере вы можете видеть, что сеанс первоначально начался в 13:07, но также был начат в 13: 28.

Во втором примере вы можете видеть, что сеанс первоначально был запущенв 17:44 и был перезапущен в 18: 07.

Я понимаю, что это время спустя 20 минут после начала сеанса.Но сессия была , а не в режиме ожидания.Вы можете видеть, что это не было бездействующим из-за остальной части журнала.Нажатие «Далее» в форме приложения возвращает объект из состояния сеанса

Dim m As Member = StateManager.CurrentMember

, затем получает / устанавливает свойства «m».

Так что, на мой взгляд, это выглядит какдаже если пользователь не находится в режиме ожидания и не получает доступа к своим переменным сеанса, он теряет сеансы ровно через 20 минут после их начала.Обратите внимание, что на моей Базовой странице (от которой наследуются все страницы, Базовая страница наследует System.Web.UI.Page) я теперь начал записывать текущую миллисекунду в состояние сеанса, поэтому я постоянно записываю в сеанс.

Пользователь теряет свое состояние сеанса, потому что StateManager.CurrentMember (равный HttpContext.Current.Session("CurrentMember")) возвращает ноль.Это затем дает необработанное исключение, когда я пытаюсь присоединить его к объектному контексту Data Framework - так что пользователи видят мою общую страницу обработки ошибок.

Любые идеи приветствуются.

Ответы [ 3 ]

1 голос
/ 26 октября 2010

Вы упоминаете, что используете FormsAuthentication. Есть ли у атрибута истечения срока действия значение true?

http://msdn.microsoft.com/en-us/library/1d3t3c61(v=VS.100).aspx

0 голосов
/ 09 ноября 2010

Время ожидания пула приложений IIS по умолчанию составляет 20 минут.Это может помочь: MSDN

0 голосов
/ 09 ноября 2010

Единственный раз, когда я видел что-то подобное, было когда в коде была ссылка на localhost.

Хотя вы сказали, что это где-то на другом сервере, я бы предположил, что обновление AppPool будетпотерять ссылку на информацию о сеансе и, как следствие, создать другую.Один из способов попробовать это - перейти к IIS и настроить, чтобы обновление пула происходило с большим количеством ошибок, что приводило к возможному сценарию никогда не обновлять, и тогда вы могли бы найти то, что вам нужно.Попробуйте и дайте мне знать.

...