会话变量使用Firefox丢失,适用于IE

时间:2010-04-29 01:22:55

标签: firefox asp.net session-variables ihttphandler pageload

我在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();
   }

有没有人遇到过这个问题 - 希望能够提出一种传递会话变量的方法?

1 个答案:

答案 0 :(得分:0)

这是针对HTTPHandler的吗?如果这有可能与Flash有关,并且Flash正在提出请求,那么您将非常有兴趣阅读the Flash Cookie Bug。基本上,Flash只转发IE cookie。

最简单的解决方法是在Global.asax中的Application_BeginRequest上调用correctCookie,并将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