代码之家  ›  专栏  ›  技术社区  ›  Jeremy

清除webrequest中的cookie容器

  •  0
  • Jeremy  · 技术社区  · 15 年前

    我使用webrequest对象将数据发布到登录页面,然后将数据发布到同一站点上的单独页面。我正在实例化一个CookieContainer并将其分配给webrequest对象,以便处理cookies。问题是我不想在将数据发布到另一页后保留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 回复  |  直到 12 年前
        1
  •  1
  •   Shawn Steward    15 年前

    要删除cookie,需要将其过期日期设置为过去的日期。这将告诉浏览器它已过期,浏览器将删除它。

    这里有一个 example from msdn 关于如何用c(不确定你用的是哪种语言)来实现这一点。

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