2011-07-10 30 views
1

私は多くのユーザーがいる2008年以降に展開されているASP.NET Webサイトを持っています。時々、私はサイトを更新し、問題を起こさずにその変更をサーバーにアップロードしました。'System.Web.HttpContext.Current.Session'がnullです

しかし、今日、開発環境でサイトを実行しようとしていますが、コードがセッション状態にアクセスしようとするたびにエラーが発生します。 System.Web.HttpContext.Current.Sessionは常にnullと表示されます!

どこから見たらいいですか?私がそれに取り組んだ後、私がASP.NET(4.0)の現行バージョンで作業しているかどうかは100%確信していません。

これ以外のコードは正常に動作していて、最後に動作して以来変更はありませんでした。

詳細情報

私はこの上のすべての午前中を過ごしてきましたが、私は明らかに大きな問題があります。

コードをステップ実行すると、自分のページのロードハンドラが実行されることがわかります。この時点で、Sessionはnullではありません。その後、私の特殊なマスターページが実行されます。その後、私の一般的なマスターページが実行されます。次に、いくつかのコントロールのロードイベントをステップ実行します。これはすべて非常に正常なようです。

私が実行し続けると、突然私は別のページ用の特別なマスターページをロードしています。セッションは現在nullです!

私がF5を押すと、元のページが表示されます。しかし、何とかして、他のページがロードされ、セッション状態なしになってしまいます。デバッグモードをオフにすると、正常に動作しているように見えます。

明らかに、私は何か変わったことが起こっています。他のページがロードされている理由を判断する必要があります。

答えて

2

申し訳ありません。私が提供した情報は完全に間違っており、問題を解決するには十分ではありませんでした。

実際には、エラーページにリダイレクトされたカスタムエラー処理が原因でした。これはweb.configで設定されています。このエラーページは、自分のコードが不思議に実行していたマスターページを使用していました。

明らかに、GridViewコントロール内でエラーが発生していました。これはASP.NETコードであり、私のものではありません。そのため、私はそれを踏んだり、通常のハンドラでそれをキャッチすることができませんでした。

これは分かりませんでした。私がエラーページのLoadイベントハンドラを実行していたなら、それは明らかでした。しかしそれはそれをスキップしているように見えます。したがって、私の混乱。

2

Test.aspxのような静的なページを配置し、そのページを参照してください。読み込まれた場合は、コードの後ろにページのSessionプロパティを使用してみてください。それでもエラーは出ますか?その場合、セッションが読み込まれません。私は、HTTPモジュールを作成し、セッション情報の読み込みを担当するメソッドにフックすることをお勧めします。何が間違っているか見てください。

+0

うーん... Test.aspxはうまくロードされます。そして、コードの背後にあるPage_Load()の間にSession!= nullのように見えます。これは非常に奇妙です。 –

+0

from 'Session!= null'セッションがヌルでないか、動作しているということを意味すると認識しました。その場合は、コードの一部を表示する必要があります。 'Session'オブジェクトを使う場所。 –

+0

はい、この場合、セッションはnullではありません。 (私はコードの中でC#を使用しています) –

1

ファイルまたはその他のpre-load eventsを調べて、SessionがNULLに明示的に設定されていないことを確認してください。

+0

答えは正しくないかもしれませんが、問題をデバッグするための光線を与えるかもしれません。 – Nitesh

2

ちょっと推測します - 何らかの理由でsessionStateを無効にしましたか?

<sessionState mode="Off"/> 
+0

いいえ、私は "sessionState"のソリューション全体を検索しました。私が見つけたマッチは、読んでいたところだけで、web.configには結果はありませんでした。 –

+0

親web.configやmachine.configなどの任意の種類のsessionStateもチェックしましたか? –

+0

ソリューション全体。 –

0

誤ったマスターページが、セッションオブジェクトが利用できない外部クラスのコードを呼び出している可能性がありますか?