정말 이상한 ASP.net 간헐적 인 세션 지속성 문제가 있습니다. 먼저 몇 가지 사실 :매우 특이한 ASP.net 세션 변수 지속성
환경 : 끈적 세션과
- F5로드 밸런서가 활성화 :
- 웹 서버 : 2 * 윈도우 서버 2008 R2,
- .NET Framework 버전 : 2.0.50727, IIS7,
- 데이터베이스 서버 : SQL Server 2008 R2
- 세션 프로토콜 : ASP.net InProc 세션, 20 분으로 설정된 시간 초과, cookieless = false
- CMS : 문제와에 400.net
좋아는 Ektron CMS.
우리는 장바구니에 대해 웹 사이트에서 설정 한 몇 가지 사용자 지정 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")과 같은 다른 세션 변수가 세션 ("ASPNETShoppingCart")에 대한 값을 보지 못하는 동안 추적에 표시됩니다. - 내가 이상하다고 생각한 이유는 아마도 이것은 반대의 객체이기 때문입니다 문자열에?
로드 밸런서를 직접 우회하여 코드를 서버에서 직접 호출하여 문제를 배제했습니다.
나는 여전히 로그인되어 있고 다른 세션 값이 화면에 나타나기 때문에 문제가 발생하면 전체 세션이 파괴되지 않는다는 것을 알고 있지만 장바구니 값은 표시되지 않습니다.
이런 문제가 발생할 수있는 이유는 무엇입니까? 세션 변수를 보호하는 방법이 있습니까? 아니면 적어도 상태를 변경하면 통지를 받으면서이 문제의 원인을 추적 할 수 있습니까?
안녕하세요 이카루스, 의견에 감사드립니다. 내 프로토콜을 OutofProcess로 전환하고 DB에 저장하는 것을 실제로 고려했습니다.하지만 '핵'옵션을 사용하기 전에이 세션 객체가 왜 지속성을 잃어버린 것인지 정확히 지적하고자합니다. 이상하게도 프로덕션 서버의 다른 미러에서이를 다시 만들 수는 없습니다. 같은 코드, 동일한 db 등등. IIS 설정, 세션을 방해하는 Windows 서비스, 일부 바이러스 백신 또는 방화벽의 차이 (생각을하게됩니다!)와 같은 환경 변수라고 생각하고 있습니다. –
생산하지만 생산 환경과 동일한 적재 조건을 재현 할 수 있어야합니다. 프로덕션 서버에 바이러스 백신이 없기를 바랍니다. 나는 이런 일을하는 사람에게 매우 화가 났을 것입니다. – Icarus
그래서 나는 - 나는 주된 생산 환경의 sys 관리 요소를 스스로 제어하지 않으므로 나는 아무것도 배제 할 수 없다! –