2011-10-21 9 views
0

申し訳ありませんが、これは高度なVB.NETプログラマのための基本的な質問かもしれませんが、私はVB.NETの初心者です。IHttpHandlerの文脈の問題

ウェブアプリケーションがあり、特定のページにログインする必要があります。ユーザーがログインしている場合は、この技術を使用し、古いプログラマを確認するには:

Public Class CustomHandler 
    Implements System.Web.IHttpHandler, IReadOnlySessionState 

    Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest 
     Dim sv As New WL.SessionVariables(context) 
     If Not (sv.IsLoggedIn) Then 
      context.Response.Write("No access unless you're the CEO!!!" & sv.IsLoggedIn) 
     ElseIf sv.IsLoggedIn Then 
      DownloadFile(context) 
     Else 
     End If 
    End Sub 
    //other code 
End Class 

Dim sv As New WL.SessionVariables(Me.Context) 

    If Not (sv.IsLoggedIn) Then 
     Response.Redirect(WL.SiteMap.GetLoginURL()) 
    End If 

をまあ、私はこれが私によって行わハンドラでチェックするにはログインして私はこれを試してみました使用する必要があります

さて、 "ログインしていますか"のチェックは常に(私がログインした後でも)偽です。私はそれがコンテキストの問題だと思います。したがって、他のすべてのページはロギングチェックでうまく動作しますが、このハンドラにはこの特定の問題があります。

お手伝いできますか?

UPDATE

ログインがトラフこの方法で行われます:

Public Sub SetCreditialCookie(ByVal accountID As Integer) 
     Me.AccountID = accountID 
     m_context.Session.Item("loggedInAccount") = accountID 

     m_context.Response.Cookies.Add(New System.Web.HttpCookie("account_id", CStr(m_context.Session.Item("account_id")))) 
     m_context.Response.Cookies("account_id").Expires = DateTime.Now.AddDays(5) 
    End Sub 

、それがログインしています、それをチェックするために、このメソッドが呼び出されます。

Public Function IsLoggedIn() As Boolean 
     If Not m_context.Session.Item("loggedInAccount") Is Nothing And Me.AccountID = m_context.Session.Item("loggedInAccount") Then 
      Return True 
     Else 
      Return False 
     End If 
    End Function 

UPDATE 2: - コードをデバッグすると、複数のkiセッションの間違ったものをチェックしていました。

答えて

0

IReadOnlySessionStateを使用しているため、SessionVariablesクラスが何らかの方法でセッションを変更しようとする可能性があります。その結果、エラーが発生する可能性があります。

この場合、IsLoggedInプロパティが正しく初期化されていないか、または期待どおりに機能しない可能性があります。

あなたはクラスのコードにアクセスできますか?その場合は、デバッグして何が起きているのかを確認してください。

+0

ありがとうございます。私はログインを行うためのコードで私の質問を更新しました。あなたが言ったように紛争を引き起こす可能性のある何かが間違っているのを見ますか? –

+0

'SetCreditialCookie'はいつ呼び出されますか? – jdavies

+0

ログインボタンを押してください: 'sv.SetCreditialCookie(accountID)' –