2011-09-12 5 views
2

ASP.NET 4.0 Webフォームアプリケーションで断続的な問題が発生しています。Session_Startで設定されたセッション値がPage_PreInitで使用できない

は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にSession ["MasterPagePath"]を設定しているので、常に私のページのPreInitメソッドで使用できるはずです。私のセッションが期限切れになった場合は、Page_PreInitが呼び出される前にSession_Startによって再セッションされます。

ここに何か不足していますか?どのような条件の下で私が何を記述することができますか?私はそれが価値があるもののためにInProcセッション状態を使用しています。

+0

私は、ASP.NETが新しいセッションを作成する必要があるかどうかを 'Pre_Init'の前に' Page request'-stageで決めると仮定します。 http://msdn.microsoft.com/en-us/library/ms178472.aspx したがって、私はこれが "ページライフサイクル"の問題ではないと思います。 –

+0

どのフレームワークを使用していますか?これらのコメントを読んだことがありますか?http://msdn.microsoft.com/en-us/library/ms178581.aspx#10? –

+0

@Tim 2つのリクエストに同じセッションIDが付いてくると、Session_Startが2回呼び出されるという興味深いコメントがあります。私はそれがこれらの行に沿った同時性または競合状態の問題かもしれないと思っていましたが、私の理解は、ASP.NETが必要に応じてセッションをロックすることになっているということです。 –

答えて

0

Application_Startに追加されたセッションオブジェクトは、コントロールレベルで使用できるとは思われません。アプリケーション["myObj"]はすべてのユーザーに対して使用可能です。

ライフサイクルhereの詳細情報。

関連する問題