2013-01-06 4 views
0

나는 정적 클래스의 정적 방법은 웹 응용 프로그램의 모든 사용자에게 공유됩니다 알다시피.
HttpContext.Current.Session [ "Key"]은 정적 클래스에서 어떻게 작동합니까?
세션이 모든 사용자에 대해 생성되기 때문에.
아래의 예는 나는이 대답 수도 있지만 내가 답을 찾을 수 없음을 알고있는 세션HTTP 컨텍스트

using System.Web; 

namespace WebApplication1 
{ 
    public static class UserInfo 
    { 
     public static string showName() 
     { 
      return HttpContext.Current.Session["UserName"] ?? ""; 
     } 
    } 
    } 

에 사용자 이름을 반환합니다.

답변

2

그것은 잘 작동합니다. 예, 클래스는 정적 일 수 있지만 메모리의 다른 섹션에 액세스 할 것이며 여기에서 충돌이 발생하지 않아야합니다.

는 내부적으로, 저는 믿습니다, 세션은 세션 고유 키를 저장하고 사전에서 데이터를 검색 할 (내가 현재의 세션 ID는 생각)을 사용한다는 사실을 제외하고 정확히 캐시와 동일하게 작동합니다. 당신이 세션을 저장 그래서 [ "푸"] = "바"정말 확인 세션 [SESSION_ID + "푸"] = "바"

업데이트

내 가정을 준됩니다하고있다 :

비교 주 공급자 기본적으로 ASP.NET 응용 프로그램은 작업자 프로세스의 메모리, 특히 Cache 개체의 개인 슬롯에 세션 상태를 저장합니다. InProc 모드가 선택되면 세션 상태가 Cache 개체 내의 슬롯에 저장됩니다. 이 슬롯은 비공개로 표시되며 프로그래밍 방식으로 액세스 할 수 없습니다. 다른 말로하면 ASP.NET 데이터 캐시의 모든 항목을 열거하면 지정된 세션의 상태와 비슷한 개체가 반환되지 않습니다. Cache 객체는 두 가지 유형의 슬롯 (개인 및 공용)을 제공합니다. 프로그래머는 공개 슬롯을 추가하고 조작 할 수 있습니다. 시스템, 특히 system.web 어셈블리에 정의 된 클래스는 자체적으로 전용 슬롯을 예약합니다. 각 활성 세션의 상태가 캐시의 개인 슬롯을 차지합니다. 슬롯의 이름은 세션 ID의 이름을 따르고 값은 내부적으로 문서화되지 않은 클래스 SessionStateItem의 인스턴스입니다. InProc 상태 공급자는 세션의 ID를 가져와 캐시의 해당 요소를 검색합니다. SessionStateItem 객체의 내용은 HttpSessionState 사전 객체에 부어지고 Session 속성을 통해 응용 프로그램에 의해 액세스됩니다. ASP.NET 1.0의 버그는 Cache 개체의 전용 슬롯을 프로그래밍 방식으로 열거 할 수 있습니다. ASP.NET 1.0에서 다음 코드를 실행하면 현재 활성화 된 각 세션의 상태로 채워진 개체에 해당하는 항목을 열거 할 수 있습니다.

출처 : http://msdn.microsoft.com/en-us/library/aa479041.aspx

(. 휴대 전화에서 형식에 대한 사과 게시)

+0

@lcarus 감사합니다. 그리고 나는 큰 explaination를 말할 것이다! !! –

1

나는 당신이 정적 필드 정적 속성을 혼동하고 생각합니다. 마법 HttpContext.Current이 아닌 보통의 정적 필드에서 HttpContext의 인스턴스를 반환하는 정적 속성이지만,이다 ASP.NET은 특정 스레드가 현재 속한 많은 동시 요청 확인할 수있는 실행 컨텍스트라고 (느슨하게) 뭔가에서 을 클릭하면 오른쪽 HttpContext 인스턴스가 반환됩니다.

특정 인스턴스은 당신의 사용자에 대한 Session 사전이 있는지 확인합니다. 답변 및 explaination에 대한

+0

@andreew Arnott 당신을 respoonse 주셔서 감사합니다. 하지만 예제로 설명 할 수 있습니까? –

관련 문제