1

HttpHandler でセッション変数を設定し、ASPX ページの Page_load イベントでその値を取得しています。私はそれを使用して設定しています

    public void ProcessRequest(HttpContext context)
    {
        HttpPostedFile file = context.Request.Files["Filedata"];
        context.Session["WorkingImage"] = file.FileName;
    }

(そして、誰かが file.FileName の有効性を確認するように提案する前に、そこにテスト文字列をハードコードすると、同じ問題が発生します。) IE では問題なく動作していますが、Firefox ではセッション変数が見つからず、次のコードの「オブジェクト参照がオブジェクトのインスタンスに設定されていません」エラー:

   protected void Page_Load(object sender, EventArgs e)
   {
        string loc = Session["WorkingImage"].ToString();
   }

誰かがこの問題に遭遇したことがありますか?セッション変数を渡す手段を思いついたことがありますか?

4

1 に答える 1

0

これは HTTPHandler 用ですか? ひょっとしてこれが Flash と関係があり、Flash がリクエストを行っている場合は、Flash Cookie Bugについて読むことに非常に興味を持つでしょう。基本的に、Flash は IE Cookie のみを転送します。

最も簡単な修正は、Global.asax の Application_BeginRequest で correctCookie を呼び出し、Flash 要求のクエリ文字列に SessionId を入れることです。

Public Shared Sub correctCookie()
    Try
        Dim session_cookie_name As String = "ASP.NET_SESSIONID"
        Dim session_value As String = HttpContext.Current.Request.QueryString("sid")
        If session_value IsNot Nothing Then
            UpdateCookie(session_cookie_name, session_value)
        End If
    Catch ex As Exception
    End Try
End Sub

Private Shared Sub UpdateCookie(ByVal cookie_name As String, ByVal cookie_value As String)
    Dim cookie As HttpCookie = HttpContext.Current.Request.Cookies.[Get](cookie_name)
    If cookie Is Nothing Then
        Dim cookie1 As New HttpCookie(cookie_name, cookie_value)
        HttpContext.Current.Response.Cookies.Add(cookie1)
    Else
        cookie.Value = cookie_value
        HttpContext.Current.Request.Cookies.[Set](cookie)
    End If
End Sub
于 2010-04-29T02:06:13.630 に答える