У меня действительно очень странная проблема с постоянством сеанса в ASP.net. Сначала несколько фактов:
Окружающая среда:
- F5 Балансировщик нагрузки с включенными липкими сессиями:
- Веб-серверы: 2 *
Windows Server 2008 R2,
- .net Framework Версия: 2.0.50727, IIS7,
- Сервер базы данных: SQL Server 2008 R2
- Протокол сеанса: сеансы ASP.net InProc, время ожидания установлено на 20 минут, cookieless = false
- CMS: Ektron CMS
400.net
Хорошо, с проблемой.
У нас есть несколько пользовательских значений сеанса VB.net, которые устанавливаются на нашем веб-сайте для корзины покупок. время от времени некоторые из этих переменных, похоже, теряют постоянство. Я говорю некоторые, потому что основной сеанс остается постоянным. Я думаю, что главный виновник этот парень:
Shared Sub New()
' If the cart is not in the session, create one and put it there
' Otherwise, get it from the session
If HttpContext.Current.Session("ASPNETShoppingCart") Is Nothing Then
Instance = New ShoppingCart()
Instance.Items = New List(Of CartItem)
HttpContext.Current.Session("ASPNETShoppingCart") = Instance
Else
Instance = CType(HttpContext.Current.Session("ASPNETShoppingCart"), ShoppingCart)
End If
End Sub
Даже если этот объект сеанса остается постоянным, он не отображается при выполнении трассировки:
, например
мои другие переменные сессий, такие как Session ("userId"), отображаются в трассировке, пока я НИКОГДА не вижу значения для Session ("ASPNETShoppingCart") - которое я считал странным - возможно, это потому, что это объект, а не строка?
Я исключил проблемы с балансировщиком нагрузки, обойдя его напрямую и вызвав код непосредственно на сервере.
Я знаю, что полный сеанс не уничтожается при возникновении проблемы, потому что я все еще вошел в систему, и другие значения сеанса отображаются на экране - но мои значения в корзине покупок не отображаются.
Кто-нибудь знает, что может вызвать что-то подобное? Есть ли способ защитить переменную сеанса или, по крайней мере, получить уведомление, если она меняет состояние, чтобы я мог отследить, что это вызвало?