>

ASHX 파일에서 세션 변수를 설정하려고합니다. 나는 그것에 대해 조금 읽고 그것을 얻었습니다.

<올>
  • ASHX 핸들러를 호출하는 ASPX 파일에 변수를 설정했습니다.
  • 처리기에서 변수를 재설정하려고했습니다.
  • 'System.Web.HttpContext.Current.Session'이 null이라는 오류가 발생합니다. 내가 말했듯이, 나는 약간의 독서를했고 이것이 효과가있는 것처럼 보입니다. 그러나 어떤 이유로 든 나를 위해 일할 수는 없습니다.

    System.Web.SessionState를 사용하여 추가했습니다. 내 처리기 상단에 있지만 유용한 것은없는 것 같습니다. 세션 변수 (HttpContext.Current.Session [ "saml_session_id"])가 설정되었지만 지속되지는 않습니다. aspx 파일로 이동하여 바로 창에서 HttpContext.Current.Session [ "saml_session_id"]을 호출하면 NULL 만 반환됩니다.

    이 지침을 지침으로 사용했습니다 ( .ashx에서 세션에 액세스하는 방법 파일? ),하지만 분명히 뭔가 빠졌습니다.

    아무도 나에게 조언 할 수 있습니까? 계속 연구하고 해결하면 해결책을 게시합니다.

    아래 코드를 참조하십시오.

    .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 ()이 다시 비어 있습니다. 기본적으로 처리기와 웹 양식이 통신하지 않거나 세션이 공유되지 않는 것처럼 보입니다. 네임 스페이스가 동일한 지 확인했습니다. 확인해야 할 것이 있습니까?

    • 답변 # 1

      처리기가 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();
          }
      }
      
      

    • 답변 # 2

      가져 오기만하면됩니다

      IRequiresSessionState

      그런 다음 데이터를 추가하십시오 :

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

    • 답변 # 3

      이 문제는 양식에서 응답을 받았지만 올바른 위치를 찾지 못한 신인 실수였습니다. 바이트 단위이고 ASHX 파일의 세션 ID가 있습니다.

    관련 자료

  • 이전 ghostscript - gs를 통해 pdf를 ps로 변환 할 때 문제가 발생했습니다
  • 다음 java - 멀티 캐스트로 게시하는 동안 ZeroMQ 323 위에 JZMQ 2xx에서 메모리 누수가 있습니까?