2009-08-28 17 views
0

aspnet_stateによって管理されるoutprocセッションを使用しています。時々、セッションが無効であることを示すランタイムエラーが発生することがあります。だから私はセッションが私が作るすべてのリクエストに対して有効かどうかをチェックしたいと思っていました。でも、Javaを使ってthis Questionのような適切な方法を見つけることができませんでした。aspセッションが有効かどうかを確認するには?

ここは、私がpage_preinitイベントで現在使用しているコードです。これは醜いですが、うまくいきます。

  Try 
       Dim x = Session.Keys().Item(0) 
      Catch ex As Exception 
       Session.Clear() 
      End Try 

誰かがより良いアプローチを知っていますか?

ありがとうございました

+0

実行時の正確なメッセージは何ですか?これは、無効なものではなく新しい/空のセッションでも発生するnull参照例外に基づいて、ベルと、上記の作業でテストしている方法を呼び出しません。 – olle

+0

フォーム認証を使用していますか? – PortageMonkey

+0

olle:セッションが存在します(NULLではありません)が、すべての要素にアクセスすると例外がスローされます。これはたまにしか発生せず、私の開発マシンではビルド/リビルドをたくさん行うので、 – Youssef

答えて

0

実際には、セッションの最初の要素(session.item(0))を調べて問題を解決しました。 try catchにコードを挿入しました。例外がある場合はセッションをクリアするだけです。このコードはすべてのマイページのベースページにあります。

のでPREINITイベントでの私のコードは、この

Private Sub Page_PreInit(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreInit 
    Try 
     Dim x = Session.Keys().Item(0) 
    Catch ex As Exception 
     Session.Clear() 
    End Try 
End Sub 

のように見える醜いのようですが、それは私の問題を解決しません。

ありがとうございました。

1

コンテキストオブジェクトをチェックしてみてください。

C#の

if(Context.Session != null) 
{ 
    //Redirect to login page etc 
} 

VB(VBコンバーターへのC#は、これが正しいかどうhere..not確認に使用)

If Context.Session IsNot Nothing Then 
    'Redirect to login page etc 
End If 

あなたがフォーム認証を使用していて、それが正しくセットアップされている場合は、それをリダイレクトする必要があります。引き続き明示的に説明する必要がある場合は、このタイプのコードをすべての要求に追加するのではなく、各ページが派生できる基底クラスであるGlobal.asaxに配置することをお勧めします。

+0

私が使っているコードはベースページにあります。しかし、セッションは存在しません、それはnullではありません。 eny要素にアクセスすると例外がスローされます。 asp_netセッションを再開するだけで問題が解決するか、コード内でクリーンアップします。私が使用しているコードは私の問題を解決しますが、他にそれがあるかどうか疑問に思っています。 – Youssef

+0

うん。セッションのタイムアウトではなく、セッション情報(キー)が正しく設定されていないという問題があるようです。 aspnet_state DBを使用して同様の問題が発生しました。私たちのアプローチは、aspnet_state DBが有効なセッションオブジェクトを返すことを検証するためにnullをチェックすることに加えて、セッションキーにアクセスしようとしました。 aspnet_state DBによって返されている不良セッションに関する根本的な問題については...まだ解決していない – PortageMonkey

0

エラー処理ブロックの最初の項目にアクセスするのではなく、Session.Countをチェックするだけです。

+0

いいえ、カウントは正しいです。セッションには要素が含まれていますが、破損しています何らかの理由で。あなたはそれが何度か(頻繁にアクセスされる)実行された後にprocセッションを使用することによってそれを複製することができます、それはクラッシュを開始します。それは記憶上の問題かもしれません。私は完全にそれを調べなかったが、試してみるとうまくいく。 – Youssef

関連する問題