2013-04-16 1 views
0

에 여기를 살펴 C# WebRequest using Cookies Reuse Connection with HttpWebRequest in C# C# keep session id over httpwebrequest세션 쿠키 - CookieContainer 스택보다는 힙 이상의 원인이 문제

Multiple WebRequest in same session 그리고 그것은 내가 회원으로 내 CookieContainer를 저장하고자 제외하고있어 무엇을 했어 (session_cookie라는 이름의) 클래스를 connector라고 부릅니다.

CookieContainer t = new CookieContainer(); 
HTTPReq = (HttpWebRequest)WebRequest.Create(scriptURL); 
HTTPReq.CookieContainer = t; 

하지만

HTTPReq = (HttpWebRequest)WebRequest.Create(scriptURL); 
HTTPReq.CookieContainer = session_cookie; 

을 사용하는 경우 다음 그것은 작동하지 않습니다 내 문제는 내 코드에서 임시 객체를 사용하는 경우 다음 쿠키가 잘 작동한다는 것입니다!

public class Connector 
{ 
    public CookieContainer session_cookie; 
    private string session_id; 
    private HttpWebRequest HTTPReq; 
    private HttpWebResponse Response; 

    //Session oriented connection 
    public string serverRequest(string scriptURL, string payLoad) 
    { 
     try 
     { 
      HTTPReq = (HttpWebRequest)WebRequest.Create(scriptURL); 
     HTTPReq.CookieContainer = session_cookie; 
     HTTPReq.Method = "POST";      

     //Data arguments 
     byte[] byteArray = Encoding.UTF8.GetBytes(payLoad); 
     HTTPReq.ContentType = "application/x-www-form-urlencoded"; 
     HTTPReq.ContentLength = byteArray.Length; 

     //Get the stream to write into 
     Stream dataStream = HTTPReq.GetRequestStream(); 
     dataStream.Write(byteArray, 0, byteArray.Length); 
     dataStream.Close(); 

     Response = (HttpWebResponse)HTTPReq.GetResponse(); 

     Encoding enc = Encoding.GetEncoding(1252); // Western latin alphabet (windows default) 

     //Get the repsonse from the server 
     StreamReader ResponseStream = new StreamReader(Response.GetResponseStream(), enc); 

     string response = ResponseStream.ReadToEnd().Trim(); 

     Response.Close(); 
     ResponseStream.Close(); 
     return response; 
     } 
     catch (WebException ex) 
     { 
     Console.WriteLine(ex.ToString()); 
     return null; 
     } 
    }  
} 

어떤 아이디어 : 나는 여기

는 커넥터 클래스 코드 이유를 알아낼 수 없습니다?

답변

0

Connector 클래스의 생성자가 없어서 CookieContainer 속성을 초기화해야합니다. 또한 응답에서 쿠키를 캡처하고 다음 요청으로 보내려면 CookieCollection을 사용해야합니다. 이 같은 것이 작동해야합니다.

public class Connector 
{ 
    public CookieContainer session_cookie; 
    private CookieCollection cookies; 
    private string session_id; 
    private HttpWebRequest HTTPReq; 
    private HttpWebResponse Response; 

    public Connector() 
    { 
     session_cookie = new CookieContainer(); 
     cookies = new CookieCollection(); 
    } 

    //Session oriented connection 
    public string serverRequest(string scriptURL, string payLoad) 
    { 
     try 
     { 
     HTTPReq = (HttpWebRequest)WebRequest.Create(scriptURL); 
     HTTPReq.CookieContainer = session_cookie; 
      HTTPReq.CookieContainer.Add(cookies); 
     HTTPReq.Method = "POST";      

     //Data arguments 
     byte[] byteArray = Encoding.UTF8.GetBytes(payLoad); 
     HTTPReq.ContentType = "application/x-www-form-urlencoded"; 
     HTTPReq.ContentLength = byteArray.Length; 

     //Get the stream to write into 
     Stream dataStream = HTTPReq.GetRequestStream(); 
     dataStream.Write(byteArray, 0, byteArray.Length); 
     dataStream.Close(); 

     Response = (HttpWebResponse)HTTPReq.GetResponse(); 
      cookies = Response.Cookies; // capture cookies from response for next request 

     Encoding enc = Encoding.GetEncoding(1252); // Western latin alphabet (windows default) 

     //Get the repsonse from the server 
     StreamReader ResponseStream = new StreamReader(Response.GetResponseStream(), enc); 

     string response = ResponseStream.ReadToEnd().Trim(); 

     Response.Close(); 
     ResponseStream.Close(); 
     return response; 
     } 
     catch (WebException ex) 
     { 
     Console.WriteLine(ex.ToString()); 
     return null; 
     } 
    } 

} 
관련 문제