문제

웹의 요청-응답 특성이 본질적으로 상태가 없다는 점을 감안할 때 HTTPContext가 어떻게 유지되는지 궁금합니다.

httpruntime 클래스가 요청 (httpworkerRequest) 에서이 섹션을 읽음으로써 httpcontime 클래스를 생성 할 수 있도록 __eventTarget / __eventArguments 숨겨진 필드의 일부로 발송되는 httpcontext 객체에 대한 식별자입니까? 나는 생각하지 않는다

HTTP 파이프 라인에 대한 이해력에 구멍을 채우려 고하면 알려 주시면 이에 대한 정보를 찾을 수 없었습니다.

httpcontext.current.session [ "mykey"] = value와 같은 것을 이해합니다.

그냥 작동하지만 다른 언어 (Perl)에서 비슷한 일을해야한다면, 나는 숨겨진 필드를 똑같이 사용해야 할 것입니다.

감사합니다 -Venu

도움이 되었습니까?

해결책

HTTPContext는 각 요청에 대해 재생성됩니다. 그러나 httpsession은 요청에 걸쳐 서버에 저장됩니다. 기본적으로 httpsession은 사전입니다 u003Cstring, Dictionaryu003Cstring, object> >. 초기 키인 세션 ID는 쿠키 또는 쿼리 문자열 매개 변수 (쿠키없는 세션을 사용하는 경우)에 의해 제공됩니다. Fiddler를 사용하는 경우 해당 사용자 세션의 키가 포함 된 asp.net_sessionid 쿠키가 표시됩니다.

코드 :

class HttpSessionState {
   private static readonly Sessions = 
     new Dictionary<string, Dictionary<string, object>>();

   public object this(string key) {
      get {
         return GetCurrentUserSession()[key]
      }
      set {
         GetCurrentUserSession()[key] = value;
      }
   }

   private Dictionary<string, object> GetCurrentUserSession() {
      var id = GetCurrentUserSessionId[]
      var d = Sessions[id];
      if (d == null) {
         d = new Dictionary<string, object>();
         Sessions[id] = d;
      }
      return d;
   }

   private string GetCurrentUserSessionId() {
      return HttpContext.Current.Request.Cookies["ASP.NET_SessionId"].Value;
   }
}

실제 구현은 또한 세션 타임 아웃, 거주 및 Cookieless 세션을 처리하지만 기본 아이디어는 동일합니다.

다른 팁

HTTPContext 우산 아래의 모든 것이 같은 방식으로 작동한다고 생각하지 않기 때문에 귀하의 질문에 대한 답이 하나 있다고 생각하지 않습니다. 당신이 선택한 예에서, 세션 상태, 키와 값은 서버 측에 저장됩니다. 미래의 요청을 해당 세션 상태에 연결하는 방법은 (완전히 다른) 키가있는 쿠키를 사용하는 것입니다. 브라우저가 또 다른 요청을 할 때, 요청과 함께이 쿠키를 보내고 서버는이 쿠키를 사용하여 어떤 세션을 매핑할지 파악합니다. 일단 그것을 파악하면, 당신은 다시 당신의 사전에, 응답을 가로 질러 접근 할 수 있습니다.

따라서 Perl에서 수행하려면 쿠키를 수동으로 생성하고 고유 키를 저장하고 세션 상태 사전에 고유 한 키를 서버 측 매핑하고 위에서 설명한 것을 거의 수행하려고합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top