如何在ASHX文件中设置会话变量

问题描述 投票:0回答:3

我正在尝试在ASHX文件中设置会话变量。我读了一下,得到了这么远:

  1. 我在调用ASHX处理程序的ASPX文件中设置变量。
  2. 我试图在处理程序中重置变量。

我得到一个错误,说'System.Web.HttpContext.Current.Session'为空。就像我说的那样,我已经完成了一些阅读,它看起来好像这应该有效,但出于某种原因,我无法让它为我工作。

我使用System.Web.SessionState添加了使用;在我的处理程序的顶部,但似乎没有做任何有用的事情。 Session变量(HttpContext.Current.Session [“saml_session_id”])被设置为,但似乎没有持久化。当我到达aspx文件并从我的直接窗口调用HttpContext.Current.Session [“saml_session_id”]时,只返回NULL。

我用它作为指导(How to access Session in .ashx file?),但显然我错过了一些东西。

任何人都可以建议我吗?我将继续研究,如果我解决这个问题,将发布解决方案。

请参阅下面的代码。

在我的.aspx文件中 - 我声明了我的会话变量:

HttpContext.Current.Session["saml_session_id"] = string.Empty;

然后在同一个文件中我发布到ashx文件:

var response = Post("http://" + Request.ServerVariables["HTTP_HOST"].ToString() + "/API/Login.ashx", new NameValueCollection() {
            {"Username",Username},
            {"Password",Password}
        });

然后在我的ashx文件中,我有以下内容(这是一个精简版):

using System.Web.SessionState;

//Some validation happens and a string called session_id gets generated.

context.Session["saml_session_id"] = session_id;

//while I'm in the ashx file, context.Session["saml_session_id"] persists.

处理程序中的请求处理完毕后,ASPX文件中的下一个代码是:

  if (Response.Status.ToString() == "200 OK") {
            Context.Response.Redirect("../Play.aspx?SessionId=" + HttpContext.Current.Session["saml_session_id"].ToString());
        }

但是HttpContext.Current.Session [“saml_session_id”]。ToString()现在又是空白。基本上它看起来像处理程序和Web表单没有通信或会话没有被共享。我已经检查过以确保名称空间是相同的。我还应该检查一下吗?

asp.net session webforms ashx
3个回答
4
投票

确保处理程序继承自System.Web.SessionState.IRequiresSessionState,就像您提供的链接一样。如果您已经这样做了,那么您应该声明已经完成了并且发布了您的代码。

如果导入命名空间,则不需要具有HttpContext.Current部分。

public class ImageHandler : IHttpHandler, System.Web.SessionState.IRequiresSessionState
{
    public void ProcessRequest(HttpContext context)
    {
      string Name = "";
      if (context.Session["filename"] != null)
         Name = context.Session["filename"].ToString();
    }
}

0
投票

您需要做的就是导入

IRequiresSessionState

然后添加你的数据:

context.Session.Add("User", "Your Object");


-1
投票

这个问题是一个新手的错误,因为我从表格中得到了回复,但没有找到正确的地方。结果是以字节为单位,ASHX文件中的会话ID就在那里。

© www.soinside.com 2019 - 2024. All rights reserved.