2011-09-12 3 views
2

ASP.NET 4.0 Web Forms 응용 프로그램에 일시적인 문제가 있습니다.Page_reart에서 Session_Start에 설정된 세션 값을 사용할 수 없습니다.

은으로 session_start, 나는 세션에서 마스터 페이지 파일 경로를 저장 :

protected void Session_Start(Object sender, EventArgs e) 
{ 
    // Not shown: get master page path from database 

    Session["MasterPagePath"] = PathIGotFromTheDatabase; 
} 

그런 다음 내 페이지 'Page_PreInit에, 나는 Page.MasterPageFile

protected void Page_PreInit(object sender, EventArgs e) 
{ 
    Page.MasterPageFile = Session["MasterPagePath"] + @"/MyMasterPage.Master"; 
} 

을 설정 세션 값을 사용 이것은 99 %의 시간 동안 작동하지만 때로는 무언가가 깨지고 Session [ "MasterPagePath"]가 null입니다. 사용자는 사이트를 다시 사용하기 위해 활성 브라우저 세션을 모두 닫아야한다고보고합니다.

내 이해는 Session_Start의 [ "MasterPagePath"] 세션을 채우기 때문에 항상 내 페이지의 PreInit 메소드에서 사용할 수 있어야한다는 것입니다. 내 세션이 만료 된 경우 Page_reInit가 호출되기 전에 항상 Session_Start에 의해 다시 채워집니다.

여기에 뭔가가 있습니까? 어떤 조건에서 설명 할 수 있습니까? InProc 세션 상태를 사용하고 있습니다.

+0

ASP.NET은'Pre_Init' 이전의'Page request'-stage에서 새로운 Session을 생성해야하는지 여부를 결정한다고 가정합니다. http://msdn.microsoft.com/en-us/library/ms178472.aspx 따라서 나는 이것이 "페이지 라이프 사이클"이라고 생각하지 않습니다. –

+0

어떤 프레임 워크를 사용하고 있습니까? 다음 의견을 읽으셨습니까? http://msdn.microsoft.com/en-us/library/ms178581.aspx#10? –

+0

@Tim 두 개의 요청에 동일한 세션 ID가있는 경우 Session_Start가 두 번 호출된다는 흥미로운 설명이 있습니다. 이 줄에 따라 동시성 또는 경쟁 조건 문제가 될 수 있다고 생각했지만 ASP.NET은 필요한 경우 세션을 잠글 것으로 가정합니다. –

답변

0

Application_Start에 추가 된 세션 개체를 제어 수준에서 사용할 수 있다고 생각하지 않습니다. 응용 프로그램 [ "myObj"]는 모든 사용자가 사용할 수 있습니다.

수명주기에 대한 자세한 내용 here.

관련 문제