2010-04-09 59 views
0

我正在使用WebRequest对象将数据发布到登录页面,然后将数据发布到同一站点上的单独页面。我正在实例化CookieContainer并将其分配给WebRequest对象,以便处理Cookie。问题是,我不想在将数据发布到其他页面后保留cookie。我如何删除该cookie?清除WebRequest中的cookie容器

private CookieContainer cookie_m; 
protected CookieContainer CookieContainer 
{ 
    get 
    { 
     if (cookie_m == null) 
     { 
      cookie_m = new CookieContainer(); 
     } 
     return cookie_m; 
    } 
    set 
    { 
     cookie_m = value; 
    } 
} 

protected virtual void SetData(WebRequest request, string sData) 
{ 
    if (!String.IsNullOrEmpty(sData)) 
    { 
     byte[] binPostData = System.Text.Encoding.ASCII.GetBytes(sData); 
     request.ContentLength = binPostData.Length; 
     System.IO.Stream sRequest = request.GetRequestStream(); 
     try 
     { 
      sRequest.Write(binPostData, 0, binPostData.Length); 
     } 
     finally 
     { 
      sRequest.Close(); 
     } 
    } 
} 

private HttpWebRequest GetNewRequest(string sUrl) 
{ 
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(sUrl); 
    request.CookieContainer = this.CookieContainer; 
    request.Method = "POST"; 
    request.ContentType = "application/x-www-form-urlencoded"; 

    return request; 
} 

public override void Submit() 
{ 
    //Login 
    HttpWebRequest request = GetNewRequest("http://mytest/login.asp"); 

    base.SetData(request, "action=validate_login&login=test&password=test"); 
    WebResponse response = request.GetResponse(); 

    System.IO.StreamReader sr = new System.IO.StreamReader(response.GetResponseStream()); 
    string sResponse = sr.ReadToEnd(); 

    //Entry screen 
    request = GetNewRequest("http://mytest/CustCreate.asp"); 
    base.SetData(request, "Site=xyz&Cust=test"); 
    response = request.GetResponse(); 

    sr = new System.IO.StreamReader(response.GetResponseStream()); 
    sResponse = sr.ReadToEnd(); 

    //Sutmit 
    request = request = GetNewRequest("http://mytest/CustCreate.asp"); 
    base.SetData(request, "Site=xyz&mydatahere&B1=Submit"); 
    response = request.GetResponse(); 

    sr = new System.IO.StreamReader(response.GetResponseStream()); 
    sResponse = sr.ReadToEnd(); 

    //How to delete cookies that have been saved? 
} 

回答

1

要删除一个cookie,您需要将其上的到期日期设置为过去的日期。这告诉浏览器它已经过期,浏览器将会删除它。

这是关于如何在C#中执行此操作的example from msdn(不确定您正在使用哪种语言)。

if (Request.Cookies["UserSettings"] != null) 
{ 
    HttpCookie myCookie = new HttpCookie("UserSettings"); 
    myCookie.Expires = DateTime.Now.AddDays(-1d); 
    Response.Cookies.Add(myCookie); 
} 
+0

我没有创建cookie。我的代码是客户端,从服务器请求页面。 – Jeremy 2010-04-11 20:02:12

+0

这就是JavaScript吗?可能想在你的问题中提及。 – 2010-04-12 06:50:52

+0

无论哪种方式,您只需要将cookie的expires属性设置为过去的日期即可。 – 2010-04-12 06:51:24