2009-07-14 22 views
8

私はそれを使用する前に基本ページクラスのセッションの有無を確認したいと思いますが、存在しない場合は例外がスローされますASP .NETセッションの確認

if (Session != null) 
{ 
    Session.Remove("foo"); 
} 

は、この例外がスローされます:にEnableSessionStateが 構成ファイルまたはPageディレクティブのいずれかで、trueに設定されている場合

セッション状態にのみ使用することができます。チェックすることにより、 System.Web.SessionStateModuleまたはカスタムセッション状態モジュールがアプリケーション構成の \\セクションに含まれていることも確認してください。

チェックは、すべてのaspxページが派生したベースページクラスのLoadイベントで発生します。アプリケーションはセッションを有効にしており、httpModulesノードにモジュールがリストされています。これは頻繁に問題なくセッションを頻繁に使用するアプリです。

このエラーは特定のページでのみ発生し、ほとんどの場合、信頼できません。私はエラーを防ぐために別の何かをしなければならないことを知っていますが、私は何が分からないのですか?

セッションをライフサイクルの早い時期に呼びますか? セッションが利用可能かどうか正しくチェックしていませんか?

答えて

3

あなたのチェックがより安全に行うことができます - Page.SessionがnullをラップContext.Sessionプロパティを確認してください。したがって、Context.Sessionを取得してnullであるかどうかを確認できるはずです。そうであれば、セッション状態は利用できません。

しかし、それはそのようにポイント別の場所で問題:)に、をPage_Load()で利用可能であるべき

0

特定のセッション変数がnullであるために例外が発生していませんが、単にセッションステートサーバーと通信するように構成されていないページでセッションロジックを使用するだけです(実際には別のマシン)。それが問題でない場合は、常にenableSessionStateがtrueに設定されていることを確認することを検討してください。

0

PageディレクティブのenableSessionStateプロパティのエラーをスローしているページを確認しましたか? .aspxページに移動し、enableSessionStateプロパティがtrue/falseに設定されているかどうかを確認することで、これを行うことができます。 falseに設定されている場合は、trueにしてください。

またタグ<pages />のWeb.configファイルにチェックし、含まれるようにそれを更新 -

<pages enableSessionState="true" /> 

参考:Here

+0

enableSessionStateはページクラスのプロパティである必要がありますか?私はプロパティとしてenableViewStateを見るだけです。 –

0

HttpContext.Current.SessionをチェックしてみるかさえHttpContext.Current(I行うことコンポーネントが呼び出されているユニットテスト、中にたくさん現在のリクエストがセッションを使用している場合、私は、これらのVARSを得たが、私はNUnitのからそれらを呼び出すとき、私は彼らが利用できていない)

9

ASP.NETあなたが決定するために、このようなメソッドを使用することができます:

public static bool RequestHasSession 
    { 
     get 
     { 
      return (HttpContext.Current.Handler is IRequiresSessionState); 
     } 
    } 

Webコンテキストで実行していることがわからない場合は、そのHttpContextを確認する必要があります。現在は、現在はnullではありませんでした。

+0

'IReadOnlySessionState'は' IRequiresSessionState'を継承しているので、 'HttpContext.Current.Handler is IRequiresSessionState'をチェックするだけです。 –

+1

良い観察 - コードを修正しました。 –