2009-08-25 2 views
1

외부 서버와 통신하기 위해 웹 사이트에 웹 서비스를 사용하고 있습니다. 외부 서버가 세션 ID를 요청합니다.HttpWebRequest : 세션 ID를 얻는 방법

HttpWebRequest webRequest = WebRequest.Create(ExtUrl) as HttpWebRequest; 
webRequest.Credentials = new NetworkCredential(ExtAccountToUse, ExtPassword); 
HttpWebResponse webResponse; 
webRequest.Method = "POST"; 
webRequest.ContentType = "application/x-www-form-urlencoded";     
StreamWriter writer = new StreamWriter(webRequest.GetRequestStream()); 
writer.Write(xmlOutput); 
writer.Close();    
webResponse = webRequest.GetResponse() as HttpWebResponse; 

가 외부 서버로 전송하는 세션 ID를 얻을 수 있습니다 :

우리의 다음 코드

는 외부 서버를 물어? 시간에 대한

감사

+0

XML (xmlOutput)을 전송하는 것처럼 보였지만 콘텐츠 유형을 표준 HTML 양식 게시물처럼 설정했습니다. 조금 이상합니다. 콘텐츠 유형으로 "text/xml"을 사용하지 않는 이유는 무엇입니까? – AnthonyWJones

+0

외부 서버가 어떤 식으로 세션 ID를 요청합니까? – AnthonyWJones

+0

외부 서버가 서버에 보내는 첫 번째 요청에서 세션 ID를 요청합니까? 클라이언트에서 재사용 할 수있는 유효한 세션 ID를 생성하는 것은 대상 서버의 책임이어야하기 때문입니다. –

답변

1

요청을 보내는 서버 유형에 따라 다릅니다. 예를 들어 IIS 호스팅 사이트가있는 경우 ASP.NET_SessionId (또는 요청 문자열에서) 세션 ID inside a cookie이 필요합니다. 다른쪽에 자바 서블릿 엔진이있는 경우 JSESSIONID (또는 요청 경로 매개 변수 jsessionid)이라는 쿠키가 필요합니다.

그래서 다릅니다. 그러나 HttpWebRequest 내의 쿠키 설정은 어렵지 않습니다.

CookieContainer cookies = new CookieContainer(); 
cookies.Add(new Cookie("ASP.NET_SessionId", sessionId)); 
request.CookieContainer = cookies; 

당신이 쿠키 안에 저장 세션 식별자가 특정 형식을 가지는 다시, 이것은 다른 쪽 끝에서 서버 유형에 따라 달라집니다 : 당신은 재산 CookieContainer을 사용할 수 있습니다. ASP.NET에서 기본적으로 클래스 SessionIDManager은 세션 ID를 생성하고 유효성을 검사하는 데 사용됩니다. 이 클래스는 HttpContext이 필요하므로 재사용하기가 어렵습니다. 그러나 Reflector가 세션 ID를 생성하는 방법을 확인할 수 있습니다.

+0

cookie.domain에 오류가 있습니다. 비워 둘 수는 없습니다. – Emanuele

0

점점 세션 ID는 사용자가 사용하여 얻을 수있는 우려까지 같이

Session.SessionID 

을하지만 서버에 세션 ID를 생각하지 않는다 외부에 대한 관심의 섬기는 사람.

+0

현재 서버를 사용하는 것이 의심 스럽습니다. 세션 ID는 외부 서버와 대화 할 때 유용합니다. – AnthonyWJones

+0

나는이 방법을 사용하지 않고 시간 내 주셔서 감사합니다. – Xstahef

1

외부 서버가 이전에 보낸 요청에 의해 생성 된 세션을 식별하는 기존 세션 ID를 필요로하는 경우 관련된 모든 요청에 ​​대해 CookieContainer의 인스턴스를 유지 관리해야합니다. 외부 서버는 세션 쿠키를 설정할 때

request.CookieContainer = myExternalServerCookies; 

지금, 그 후속 요청에 그 쿠키를 볼 수 - : 모든 HttpWebRequest를 사용하면 외부 서버와 통신하는 데 사용으로

CookieContainer myExternalServerCookies = new CookieContainer(); 

이 라인을 포함한다.