source

현재 ASP일 경우 어떻게 해야 합니까?NET 세션이 null입니까?

ittop 2023. 4. 27. 22:47
반응형

현재 ASP일 경우 어떻게 해야 합니까?NET 세션이 null입니까?

웹 응용 프로그램에서 세션 변수를 읽기 위해 다음과 같은 작업을 수행합니다.

if (HttpContext.Current.Session != null &&  HttpContext.Current.Session["MyVariable"] != null)
{
    string myVariable= (string)HttpContext.Current.Session["MyVariable"];
}

HttpContext를 확인하는 것이 중요한 이유를 이해합니다.이 아직 여러 되었을 수 ) null입니다. Session["MyVariable"]이(가) null인지 확인해야 무엇입니까? 그러나 다음 중 하나를 확인해야 하는 이유는 무엇입니까?HttpContext.Current.Session 입니null까?

세션은 ASP에 의해 자동으로 생성되는 것으로 알고 있습니다.따라서 NET은 HttpContext입니다.현재의.세션은 null일 수 없습니다.이 가정이 맞습니까?null일 수 있는 경우 저장하기 전에 확인해야 한다는 의미입니까?

if (HttpContext.Current.Session != null)
{
    HttpContext.Current.Session["MyVariable"]="Test";
}
else
{
    // What should be done in this case (if session is null)?
    // Is it possible to force the session to be created if it doesn't exist?
}

예, 세션 개체가 null일 수 있지만 다음과 같은 경우는 거의 발생하지 않습니다.

페이지에 코드만 있는 경우에는 이 문제에 직면하지 않습니다.내 ASP의 대부분.NET 코드가 null을 반복적으로 확인하지 않고 세션을 사용합니다.그러나 IHTTP 모듈을 개발 중인지 아니면 ASP의 세부 사항에 포함되어 있는지는 고려해야 할 사항입니다.그물.

편집

의견에 대한 답변:세션 상태를 사용할 수 있는지 여부는 요청에 대해 AcquireRequestState 이벤트가 실행되었는지 여부에 따라 달라집니다.여기서 세션 상태 모듈은 세션 쿠키를 읽고 사용자에게 적합한 세션 변수 집합을 찾아 작동합니다.

AcquireRequestState는 컨트롤이 페이지로 전달되기 전에 실행됩니다.따라서 페이지에서 정적 클래스를 포함한 다른 기능을 호출하는 경우에는 문제가 없습니다.

시작하는 동안 Application_Start 이벤트나 정적 생성자를 사용하여 초기화 로직을 수행하는 일부 클래스가 있는 경우 세션 상태를 사용할 수 없습니다.이 모든 것은 현재 요청이 있고 AcquireRequestState가 실행되었는지 여부로 요약됩니다.

또한 클라이언트가 쿠키를 사용하지 않도록 설정한 경우에도 세션 개체는 계속 사용할 수 있지만 다음 요청 시 사용자는 새 빈 세션으로 돌아갑니다.클라이언트에 세션 상태 정보가 없는 경우 세션 상태 정보가 제공되기 때문입니다.클라이언트가 세션 쿠키를 전송하지 않으면 클라이언트를 동일한 것으로 식별할 수 없기 때문에 새로운 세션이 반복적으로 제공됩니다.

다음 문장이 완전히 정확한 것은 아닙니다.

"따라서 정적 클래스를 포함한 다른 기능을 페이지에서 호출하는 경우에는 문제가 없습니다."

HttpContext를 통해 세션을 참조하는 정적 메서드를 호출합니다.현재의.세션이 null입니다.하지만 저는 jQuery를 이용하여 ajax를 통한 웹 서비스 방식으로 메소드를 부르고 있습니다.

여기서 알게 된 것처럼 메소드의 간단한 속성으로 문제를 해결하거나 웹 서비스 세션 개체를 사용할 수 있습니다.

웹 메서드 내에서 세션 상태에 액세스하려면 다음과 같은 세션 상태 관리를 활성화해야 합니다.

[WebMethod(EnableSession = true)]

EnableSession 값을 지정하면 이제 재생할 관리되는 세션이 생성됩니다.이 값을 지정하지 않으면 null Session 개체가 표시되고 세션 개체에 액세스하려고 시도하는 동안 null 참조 예외가 발생할 가능성이 높습니다.

해결책을 주신 매튜 코시에 씨에게 감사드립니다.

그냥 2센트를 보태야겠다고 생각했어요.

에드

세션 인스턴스가 null이고 'ashx' 파일에 있는 경우 'IRrequiresSessionState' 인터페이스를 구현합니다.

이 인터페이스에는 멤버가 없으므로 클래스 선언(C#) 뒤에 인터페이스 이름을 추가하기만 하면 됩니다.

public class MyAshxClass : IHttpHandler, IRequiresSessionState

경우에는 경에는우내는▁in.ASP.NET State Service중지되었습니다.Startup typeAutomatic처음으로 수동으로 서비스를 시작하여 문제를 해결했습니다.

ASP.NET 기술 문서

요약: ASP.NET, 모든 웹 페이지는 시스템에서 파생됩니다.웹.UI.페이지 클래스입니다.페이지 클래스는 세션 데이터에 대한 HttpSession 개체의 인스턴스를 집계합니다.페이지 클래스는 사용자 지정을 위한 다양한 이벤트 및 메서드를 표시합니다.특히 OnInit 메서드는 Page 객체의 초기화 상태를 설정하는 데 사용됩니다.요청에 세션 쿠키가 없는 경우 새 세션 쿠키가 요청자에게 발급됩니다.

편집:

세션: 초보자를 위한 개념

요약: 사용자가 웹 응용 프로그램의 페이지에 대한 첫 번째 요청을 서버로 보낼 때 세션이 생성되고, 응용 프로그램은 세션을 생성한 후 응답과 함께 세션 ID를 사용자에게 다시 전송하며, 클라이언트 시스템에 작은 쿠키로 저장됩니다.따라서 "쿠키를 비활성화한 기계, 세션 정보는 저장되지 않는다"는 것이 이상적입니다.

언급URL : https://stackoverflow.com/questions/1382791/what-should-i-do-if-the-current-asp-net-session-is-null

반응형