Programing

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

lottogame 2020. 7. 17. 08:15
반응형

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


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

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

HttpContext.Current.Session [ "MyVariable"]이 null 인 이유 (변수가 아직 세션에 저장되지 않았거나 세션이 여러 이유로 재설정 된 이유)을 확인해야하는 이유를 이해하지만 왜 확인해야합니까? HttpContext.Current.Sessionnull 인 경우

내 이해는 세션이 ASP.NET에 의해 자동으로 생성되므로 HttpContext.Current.Session은 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?
}

예, Session 객체는 null 일 수 있지만 특정 상황에서만 가능합니다.

페이지에 코드 만있는 경우이 코드가 실행되지 않습니다. 내 ASP .NET 코드의 대부분은 null을 반복적으로 확인하지 않고 Session을 사용합니다. 그러나 IHttpModule을 개발 중이거나 ASP .NET의 세부 사항이 부족한 경우 고려해야 할 사항입니다.

편집하다

주석에 대한 응답으로 : 세션 상태의 사용 가능 여부는 AcquireRequestState 이벤트가 요청에 대해 실행되었는지 여부에 따라 다릅니다. 이것은 세션 쿠키를 읽고 적절한 세션 변수 세트를 찾아서 세션 상태 모듈이 작동하는 곳입니다.

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

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

또한 클라이언트가 쿠키를 비활성화 한 경우 세션 개체는 계속 사용할 수 있지만 다음 요청시 사용자는 비어있는 새 세션으로 돌아갑니다. 클라이언트에 아직 세션 상태 백이없는 경우 세션 상태 백이 제공되기 때문입니다. 클라이언트가 세션 쿠키를 전송하지 않으면 클라이언트를 동일한 것으로 식별 할 수있는 방법이 없으므로 새 세션을 계속해서받습니다.


다음 내용은 완전히 정확하지는 않습니다.

"따라서 페이지에서 정적 클래스를 포함한 다른 기능을 호출하는 경우 괜찮을 것입니다."

HttpContext.Current.Session을 통해 세션을 참조하는 정적 메소드를 호출하고 있으며 null입니다. 그러나 jQuery를 사용하여 ajax를 통해 웹 서비스 메소드를 통해 메소드를 호출하고 있습니다.

여기에서 알 수 있듯이 메소드의 간단한 속성으로 문제를 해결하거나 웹 서비스 세션 객체를 사용할 수 있습니다.

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

[WebMethod (EnableSession = true)]

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

솔루션을위한 Matthew Cozier에게 감사합니다.

방금 2 센트를 더할 줄 알았는데

에드


Session 인스턴스가 null이고 'ashx'파일에 있으면 'IRequiresSessionState'인터페이스를 구현하십시오.

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

public class MyAshxClass : IHttpHandler, IRequiresSessionState

ASP.NET 기술 기사

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

편집하다:

세션 : 초보자를위한 개념

요약 : 사용자가 웹 응용 프로그램의 모든 페이지에 대해 서버에 첫 번째 요청을 보내면 세션이 작성되고 응용 프로그램은 세션을 작성하고 응답이있는 사용자에게 세션 ID를 다시 보내 클라이언트 시스템에 작은 쿠키로 저장됩니다. . 따라서 "쿠키를 비활성화 한 컴퓨터는 세션 정보가 저장되지 않습니다".


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

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

반응형