我在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();
}
有没有人遇到过这个问题 - 希望能够提出一种传递会话变量的方法?
答案 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