64

我有一个在客户端页面(跨域,而不是在我们的 IIS 服务器等)上运行的 HttpHandler,当他们单击我们的嵌入式链接时,它会触发我们服务器上的处理程序。到目前为止一切正常。

我现在正在尝试使用 System.Web.HttpContext.Session 对象,但它为空。我认为它是空的,因为在调用 HttpHandler 之前我们没有会话?对处理程序的多次调用会为每次调用创建一个新会话?如果是这种情况,MS 在调用 HttpHandler 时是否只是禁用了 Session 对象?谁能证实这一点?

如果是这种情况,您如何维护调用之间的状态?某种基于 SQL 的数据对象?一份文件?

TIA

4

4 回答 4

146

让您的 HttpHandler 实现IRequiresSessionState接口。它将启用会话状态使用。IRequiresSessionState 可以在System.Web.SessionState命名空间中找到。

于 2009-07-09T22:34:04.623 回答
31

我认为您必须实现空接口IReadOnlySessionState,因此将加载上下文。

编辑添加:

根据 Michael Morton 的回答,您还可以实现 IRequiresSessionState,这将使您还可以对 Session 对象进行写访问

于 2009-07-09T22:32:44.970 回答
11
using System; 
using System.Web;
using System.Web.SessionState;
public class DownloadHandler : IHttpHandler, IReadOnlySessionState
{
   public bool IsReusable { get { return true; } }

   public void ProcessRequest(HttpContext context)
   {
       context.Response.Write(context.Session["kmx"]);
   }
}
于 2016-01-30T19:14:14.340 回答
-10

尝试使用当前上下文...

System.Web.HttpContext.Current.Session
于 2009-07-09T22:36:46.257 回答