developer tip

정적 메서드 내에서 세션 변수의 값을 어떻게 얻을 수 있습니까?

copycodes 2020. 12. 15. 19:28
반응형

정적 메서드 내에서 세션 변수의 값을 어떻게 얻을 수 있습니까?


jQuery와 함께 ASP.NET 페이지 메서드를 사용하고 있습니다 .... C #의 정적 메서드 내에서 세션 변수의 값을 어떻게 얻습니까?

protected void Page_Load(object sender, EventArgs e)
{
    Session["UserName"] = "Pandiya";
}

[WebMethod]
public static string GetName()
{
    string s = Session["UserName"].ToString();
    return s;
}

이것을 컴파일하면 오류가 발생합니다.

비 정적 필드, 메서드 또는 속성 'System.Web.UI.Page.Session.get'`에 대한 개체 참조가 필요합니다.


HttpContext.Current.Session["..."]

HttpContext.Current당신에게 현재를 가져옵니다 ... 음, Http Context; 액세스 할 수있는 위치 : 세션, 요청, 응답 등


스레드를 변경하지 않은 경우 HttpContext.Current.Sessionjwwishart에 표시된대로 사용할 수 있습니다 .

HttpContext.Current스레드와 관련된 컨텍스트를 반환합니다. 이것은 예를 들어 새 스레드를 시작한 경우 사용할 수 없음을 의미합니다. 당신은 할 수있다 또한 스레드 민첩성을 고려할 필요 - ASP.NET 요청은 항상 요청의 전체에 대해 동일한 스레드에서 실행되지 않습니다. 나는 생각 문맥이 적절하게 전파되어 있지만, 마음에 곰에 뭔가.


이 시도:

HttpContext.Current.Session["UserName"].ToString();

현재 웹 요청에 적용되는 인스턴스를 검색 할 수 있는 정적 속성 인 현재 Session를 통해 액세스 할 수 있습니다 . 이것은 정적 앱 코드 및 정적 페이지 메서드의 일반적인 패턴입니다.HttpContext.CurrentHttpContext

string s = (string)HttpContext.Current.Session["UserName"];

동일한 기법을 사용하여 Session장식 된 ASMX 웹 메서드 내에서 에 액세스하는 데 사용됩니다. [WebMethod(EnableSession = true)]이러한 메서드는 정적이 아니지만 상속 Page되지 않으므로 Session속성에 직접 액세스 할 수 없습니다 .

정적 코드는 동일한 방식으로 애플리케이션 캐시액세스 할 수 있습니다 .

string var1 = (string)HttpContext.Current.Cache["Var1"];

정적 코드가 다른 프로젝트 안에 있으면 System.Web.dll. 그러나이 경우 일반적으로 이러한 종속성을 피하는 것이 가장 좋습니다. ASP.NET 컨텍스트 외부에서 코드를 호출 HttpContext.Current하면 null명백한 이유로. 대신 a HttpSessionState를 인수로 요구할 수 있습니다 ( System.Web물론 여전히 참조가 필요합니다 ).

public static class SomeLibraryClass
{
    public static string SomeLibraryFunction(HttpSessionState session)
    {
       ...
    }
}

요구:

[WebMethod]
public static string GetName()
{
    return SomeLibraryClass.SomeLibraryFunction(HttpContext.Current.Session);
}

참조 URL : https://stackoverflow.com/questions/2577183/how-can-i-get-the-value-of-a-session-variable-inside-a-static-method

반응형