2009-06-24 4 views
4

CookieContainer를 사용하여 몇 개의 HttpWebRequests와 HttpWebResponses를 함께 연결했습니다.HttpWebRequest 및 HttpWebResponse : 연속 쿼리에 대한 로그인 상태 유지

코드는 쿠키 정보를 설정하고 네 번째 사용자 이름과 암호로 로그인하는 세 가지 '동의'페이지를 통과하는 사용자를 시뮬레이트하고 다섯 번째로 POST (검색)를 수행하여 응답을 문자열로 반환합니다 .

HttpWebRequest 객체를 '로그인 한 상태'로 유지하여 사용자가 검색을 수행 할 때마다 해당 단계를 거치지 않도록하는 방법이 있습니까?

정적으로 설정할 수 있습니까? 널 정보가 없거나 쿠키 정보가 부족하면 모든 단계를 거칠 수 있습니까? 그렇지 않으면 사용자가 필요로하는 게시물을 수행하십시오. 이것에 대한 좋은 패턴은 무엇입니까?

+0

중복 된 http://stackoverflow.com/questions/1027574/https-c-post? – RobV

답변

5

로그인하는 서버가 쿠키 기반 인증을 사용하는 경우 인증 쿠키를 저장할 System.Net.CookieContainer를 만들어야합니다. 이것은 매우 간단하다 :

CookieContainer container = new CookieContainer(); 

// Create web request 
request.CookieContainer = container; 

// Create next web request 
nextRequest.CookieContainer = container; 

// And so on 
... 

그냥 모든 HttpWebRequest를을 개체에 대한 CookieContainer 개체를 재사용하고, 나중에 사용하기 위해 메모리에 보관합니다.

CookieContainer는 Serializable이므로 필요한 경우 디스크에 유지할 수 있습니다. 이렇게하면 사용자가 응용 프로그램을 다시 시작한 경우에도 쿠키를 유지할 수 있습니다.

또는 페이지가 쿠키를 사용하지 않고 대신 URL에 세션 ID를 저장하는 경우, 방문한 페이지의 URL에 세션 ID를 계속 전달해야합니다. URL에 추가하면 제대로 작동합니다. :-)

+0

감사합니다. null 또는 0 개의 쿠키가있을 때 로그인하는 정적 CookieContainer를 사용 중입니다. 쿠키가 만료되었거나 어떻게 든 무효화되어 다시 로그인하고 cookieContainer를 다시 저장해야 하는지를 어떻게 확인할 수 있습니까? – CRice

+0

다음과 같은 질문을 올렸습니다. http://stackoverflow.com/questions/1041851/how-to-determine-session-timeout-using-when-reusing-cookiecontainer – CRice