2011-09-29 4 views
4

2 개의 프로젝트와 참조로 호출되는 2 개의 클래스 파일이 포함 된 솔루션이 있습니다. 내 프로젝트 중 하나에서 Session.Start 블록의 Global.asax에 데이터베이스에서 몇 가지 변수를로드하고 세션 변수로 설정하는 코드가 있습니다. Global.asax에 중단 점을 넣으면 변수가 실제로 올바르게 설정되었는지 확인할 수 있습니다.ASP.NET C# 세션 변수가 손실 됨

내 코드 숨김 모듈 또는 프로젝트의 클래스에있는 클래스의 세션 변수를 참조 할 때 해당 변수가 있습니다. 그러나 참조 (본질적으로 공유 클래스)에 의해 호출되는 클래스 중 하나에서 참조 할 경우 세션 변수는 모두 null입니다.

HttpContext.Current.Session [ "varName"]을 사용하여 클래스의 변수에 액세스합니다 (표준).

이 세션 변수에 액세스하려면 다른 것이 있습니까? 이름 공간 문제 일 수 있습니까?

+3

글쎄, "관심의 분리"관점에서 볼 때 "다른"프로젝트는 웹 환경을 직접 인식하지 않아야합니다. 세션의 어떤 값을 필요로하는 "다른 프로젝트"로 전달할 수 있습니까? – RQDQ

+0

시도해보십시오 : System.Web.HttpContext.Current.Session [ "varName"]. 또한 세션을 읽으려고하는 ASP.NET 페이지 수명주기의 단계 (예 : 세션을 읽으려고 할 때 세션이 아직로드되지 않았을 가능성이 있습니까? –

+0

모에 - 시스템에 액세스하는 데 사용되는 URL에 따라 로그인 화면에 나타나는 로고를 사용자 정의하고 있습니다. 단계별로 살펴보면 global.asax에 하나의 중단 점을 설정하고 먼저 중지하고 변수가 설정됩니다. 그러면 다음 중단 점은 내 로그인 모듈이 데이터베이스에서 로고를로드하려고 할 때입니다. 그 '다른'공유 클래스에서 프로 시저를 호출하여 이미지로드를 처리하고 데이터베이스 이름이 null입니다. 나는 그것이 작동하는 모듈에서 세션 변수를 가져 와서 그것을 이미지를로드하는 클래스 int로 전달하려고 시도 할 수 있다고 생각한다. 나는 그것을 시도 할 것이다. –

답변

3

이전에 같은 문제가 있었지만 계속 세션 내 변수를 잃어 버렸습니다. 이 기사가 내 호에 도움이되었다는 것을 알게되었습니다 : ASP.NET Case Study: Lost session variables and appdomain recyclesPRB: Session Data Is Lost When You Use ASP.NET InProc Session State Mode. 그것이 당신을 도울 수 있기를 바랍니다. 건배!

+0

고마워요,하지만 그건 내 문제가 아니야. SQLServer 모드를 사용하고 있습니다. 그리고 메인 프로젝트에서 Session을 사용할 수 있습니다. 내가 문제가있는 외부 프로젝트 (동일한 솔루션에서)에서 Session 변수에 액세스하려고 할 때입니다. –

3

코드에서 Session.Abandon()을 호출하고 있습니까? 나는 "신선한"세션에서 시작하고 있는지 확인하기 위해 웹 애플 리케이션의 시작 부분에서 이것을하고 있었다. 세션 ID가 인데도 이후에 "Abandon"이 삭제됩니다 (SessionID가 Response.Redirect 대신 Server.Transfer (URL, true) 사용과 같은 다른 수단을 통해 동일하게 유지 되더라도) , 다시 게시시.

즉, 모든 세션 변수가 올바르게 설정되어 있는지 확인한 다음 UpdatePanel의 확인란이나 버튼처럼 AutoPostBack = "True"인 이벤트 핸들러가 호출 된 순간 BAM , 나는 동일한 SessionID를 가지고 있지만 세션 변수는 0이다.

Session.Abandon()에 대한 선제 호출을 제거하면 곧바로 문제가 해결됩니다.

제프

관련 문제