2

첫 번째 요청에 로그인하는 CookieContainer를 다시 사용하지만 이후 요청에는 쿠키 컨테이너 만 사용하는 다음 코드를 작성했습니다.CookieContainer 재사용시 세션 시간 초과를 결정하는 방법

유휴 상태 인 경우 사이트에서 세션 시간 초과가 발생하면 로그인을 다시 수행해야합니다.

Q : (쿠키 컨테이너 객체를 사용하여) 시간 초과가 발생했는지 또는 'session timeout'과 같은 텍스트가 포함 된 HttpWebResponse에서 발생했는지를 확인하는 것이 가장 적합한 지 결정할 수 있습니까? 이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

 private static CookieContainer _cookieContainer; 
    private static CookieContainer CurrentCookieContainer 
    { 
     get 
     { 
      if (_cookieContainer == null || _cookieContainer.Count == 0) 
      { 
       lock (_lock) 
       { 
        if (_cookieContainer == null || _cookieContainer.Count == 0) 
        { 
         //_cookieContainer.GetCookies(
         _cookieContainer = DoLogin(); 
        } 
       } 
      } 

      return _cookieContainer; 
     } 
     set 
     { 
      _cookieContainer = value; 
     } 
    } 

그리고는이 메소드는 컨테이너에게 호출

 public static string SomeMethod(SomeParams p) 
     { 
      HttpWebRequest request_thirdPartyEnquiryDetails = (HttpWebRequest)WebRequest.Create(thirdPartyEnquiryDetails); 
      CookieContainer cookieContainer = CurrentCookieContainer; 
      request_thirdPartyEnquiryDetails.CookieContainer = cookieContainer; 
//... and it goes on to submit a search and return the response 
     } 

답변

2

글쎄, 제한 시간은 내가 25 분 후에 반복 로그인을 설정 한 30 분 때문이다.

private static DateTime? lastLoggedIn; 

    private static CookieContainer _cookieContainer; 
    private static CookieContainer CurrentCookieContainer 
    { 
     get 
     { 
      if (_cookieContainer == null || _cookieContainer.Count == 0 || !lastLoggedIn.HasValue || lastLoggedIn.Value.AddMinutes(25) < DateTime.Now) 
      { 
       lock (_lock) 
       { 
        if (_cookieContainer == null || _cookieContainer.Count == 0 || !lastLoggedIn.HasValue || lastLoggedIn.Value.AddMinutes(25) < DateTime.Now) 
        { 
         _cookieContainer = DoLogin(); 
         lastLoggedIn = DateTime.Now; 
        }       
       } 
      } 

      return _cookieContainer; 
     } 
     set 
     { 
      _cookieContainer = value; 
     } 
    } 

은 추가 예방 조치로, 나는 (그 지금 예상되지만이 볼 수 없습니다) 때 페이지 세션 시간이 초과 반환 텍스트에 대한 HttpResponse에 보십시요. 이 경우 lastLoggedIn 날짜를 null로 설정하고 검색 방법을 다시 실행합니다.

+0

이 작동해야하지만, 쿠키가 다시 –

1

CookieContainer.GetCookies (string uri) 메소드를 사용하여 도메인의 모든 쿠키를 추출 할 수 있습니다. 이 CookieCollection을 사용하면 관심있는 쿠키를 가져올 수 있고 Expired 속성이 만료되었는지 확인할 수 있습니다.

주의 할 점이 하나 있습니다. 쿠키가 유효하더라도 세션이 종료 될 수 있습니다. IIS는 웹 응용 프로그램이 실행되는 응용 프로그램 도메인을 다시 시작할 수 있으며이 경우 인증 된 모든 사용자가 세션 데이터를 잃어 버릴 수 있습니다. 따라서 쿠키를 확인하는 것은 일반적으로 로그인 상태를 유지하는 데 충분하지 않습니다.

+0

좋아, 감사 만료되지 않은 경우에도 로그 아웃 될 수 있음을 기억 – CRice