1

我在 HttpHandler 中设置一个 Session 变量,然后在 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 处调用正确的Cookie,并将 SessionId 放入 Flash 请求的查询字符串中。

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 回答