C# 如何从CookieCollection中删除cookie?

C# 如何从CookieCollection中删除cookie?,c#,.net-4.5.2,C#,.net 4.5.2,这是我的密码。一次获取/设置/删除多个Cookie是非常困难的。Set和remove(all)工作正常,但我不能从CookieCollection中仅删除过期的cookie using System; using System.Text; using System.Windows.Forms; using System.Net; using System.IO; using System.Web; using Newtonsoft.Json; namespace SetGetMultipleC

这是我的密码。一次获取/设置/删除多个Cookie是非常困难的。Set和remove(all)工作正常,但我不能从
CookieCollection
中仅删除过期的cookie

using System;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;
using System.Web;
using Newtonsoft.Json;

namespace SetGetMultipleCookies
{
    public partial class GetSetCookiesForm : Form
    {
        string readCookiesUrl = "http://test.dev/_test/cookies/readcookie.php";
        string setCookiesUrl = "http://test.dev/_test/cookies/setcookie.php";
        CookieContainer cookieHeader = new CookieContainer();
        CookieCollection cookie_collection = new CookieCollection();

        public GetSetCookiesForm()
        {
            InitializeComponent();
        }

        private void getCookiesButton_Click(object sender, EventArgs e)
        {
            // begins variable for page content.
            string pageSource;
            // send url request to web page.
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(this.readCookiesUrl);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            foreach (Cookie each_cookie in this.cookie_collection)
            {
                if (!each_cookie.Expired)
                {
                    request.Headers.Add("Cookie", each_cookie.ToString());
                } else
                {
                    // how to remove an expired cookie from cookie collection?

                }
            }

            // read the page content
            using (StreamReader sr = new StreamReader(response.GetResponseStream()))
            {
                pageSource = sr.ReadToEnd();
            }

            // display debug.
            resultBox.Text = pageSource + "\r\n";
            foreach (Cookie each_cookie in this.cookie_collection)
            {
                resultBox.Text += each_cookie.ToString() + "; expires=" + each_cookie.Expires + "; path=" + each_cookie.Path + ";domain=" + each_cookie.Domain + "\r\n";
                if (each_cookie.Expired)
                {
                    resultBox.Text += "cookie expired.\r\n";
                }
            }
        }

        private void setCookiesButton_Click(object sender, EventArgs e)
        {
            // send url request to set cookie.
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(this.setCookiesUrl);
            request.Method = "GET";
            request.CookieContainer = this.cookieHeader;
            request.ContentType = "application/x-www-form-urlencoded";
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            // set cookies
            this.cookie_collection = response.Cookies;
            // debug
            resultBox.Text = "Headers ==========\r\n";
            foreach (string each_header in response.Headers)
            {
                resultBox.Text += each_header + " = " + response.Headers[each_header] + "\r\n";
            }
            resultBox.Text += "\r\nCookies (" + response.Cookies.Count + ") ==========\r\n";
            foreach (Cookie each_cookie in response.Cookies)
            {
                resultBox.Text += each_cookie.ToString() + "\r\n";
                resultBox.Text += each_cookie.Name + "\r\n";
                resultBox.Text += each_cookie.Value + "\r\n";
                resultBox.Text += each_cookie.Expires + "\r\n";
                resultBox.Text += each_cookie.Path + "\r\n";
                resultBox.Text += each_cookie.Domain + "\r\n";
                resultBox.Text += each_cookie.Secure + "\r\n";
                resultBox.Text += each_cookie.HttpOnly + "\r\n";
                resultBox.Text += each_cookie.Expired + "\r\n";
                resultBox.Text += "\r\n";
            }
            // get response body.
            using (Stream responseStream = response.GetResponseStream())
            {
                StreamReader reader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8"));
                String responseText = reader.ReadToEnd();
                // json decode
                //LoginResponse responsej = JsonConvert.DeserializeObject<LoginResponse>(responseText);
                // display debug.
                resultBox.Text += "Response body ==========\r\n";
                resultBox.Text += responseText + "\r\n";
            }
        }

        private void removeCookiesButton_Click(object sender, EventArgs e)
        {
            this.cookieHeader = new CookieContainer();
            this.cookie_collection = new CookieCollection();

            resultBox.Text = "Logged out.";
        }
    }
}
使用系统;
使用系统文本;
使用System.Windows.Forms;
Net系统;
使用System.IO;
使用System.Web;
使用Newtonsoft.Json;
命名空间SetGetMultipleCookies
{
公共部分类GetSetCookiesForm:Form
{
字符串readCookiesUrl=”http://test.dev/_test/cookies/readcookie.php";
字符串setCookiesUrl=”http://test.dev/_test/cookies/setcookie.php";
CookieContainer cookieHeader=新CookieContainer();
CookieCollection cookie_collection=新建CookieCollection();
公共GetSetCookiesForm()
{
初始化组件();
}
私有void getCookiesButton_单击(对象发送者,事件参数e)
{
//开始页面内容的变量。
字符串页面源;
//向网页发送url请求。
HttpWebRequest请求=(HttpWebRequest)HttpWebRequest.Create(this.readCookiesUrl);
HttpWebResponse=(HttpWebResponse)request.GetResponse();
foreach(Cookie此.Cookie\u集合中的每个Cookie)
{
如果(!每个cookie.Expired)
{
添加(“Cookie”,每个_Cookie.ToString());
}否则
{
//如何从cookie集合中删除过期的cookie?
}
}
//阅读页面内容
使用(StreamReader sr=newstreamreader(response.GetResponseStream()))
{
pageSource=sr.ReadToEnd();
}
//显示调试。
resultBox.Text=pageSource+“\r\n”;
foreach(Cookie此.Cookie\u集合中的每个Cookie)
{
resultBox.Text+=each_cookie.ToString()+“expires=“+each_cookie.expires+”path=“+each_cookie.path+”;domain=“+each_cookie.domain+”\r\n”;
如果(每个cookie已过期)
{
resultBox.Text+=“cookie已过期。\r\n”;
}
}
}
私有void setCookiesButton_单击(对象发送方,事件参数e)
{
//发送url请求以设置cookie。
HttpWebRequest请求=(HttpWebRequest)HttpWebRequest.Create(this.setCookiesUrl);
request.Method=“GET”;
request.CookieContainer=this.cookieHeader;
request.ContentType=“application/x-www-form-urlencoded”;
HttpWebResponse=(HttpWebResponse)request.GetResponse();
//设置cookies
this.cookie\u collection=response.Cookies;
//调试
resultBox.Text=“Headers===================\r\n”;
foreach(在response.Headers中字符串每个_头)
{
resultBox.Text+=每个\u头+“=”+响应.Headers[每个\u头]+“\r\n”;
}
resultBox.Text+=“\r\n书签(“+response.Cookies.Count+”)=============\r\n”;
foreach(Cookie每个\u响应Cookie.Cookies)
{
resultBox.Text+=每个\u cookie.ToString()+“\r\n”;
resultBox.Text+=每个\u cookie.Name+“\r\n”;
resultBox.Text+=每个\u cookie.Value+“\r\n”;
resultBox.Text+=每个\u cookie.Expires+“\r\n”;
resultBox.Text+=每个\u cookie.Path+“\r\n”;
resultBox.Text+=每个\u cookie.Domain+“\r\n”;
resultBox.Text+=每个\u cookie.Secure+“\r\n”;
resultBox.Text+=each_cookie.HttpOnly+“\r\n”;
resultBox.Text+=每个\u cookie.Expired+“\r\n”;
resultBox.Text+=“\r\n”;
}
//获取响应体。
使用(Stream responseStream=response.GetResponseStream())
{
StreamReader=新的StreamReader(responseStream,Encoding.GetEncoding(“utf-8”);
字符串responseText=reader.ReadToEnd();
//json解码
//LoginResponse responsej=JsonConvert.DeserializeObject(responseText);
//显示调试。
resultBox.Text+=“响应正文=================\r\n”;
resultBox.Text+=responseText+“\r\n”;
}
}
私有void removeCookiesButton_Click(对象发送方,事件参数e)
{
this.cookieHeader=新的CookieContainer();
this.cookie_collection=新的CookieCollection();
resultBox.Text=“已注销。”;
}
}
}
getCookiesButton\u单击
方法中,我只想从
CookieCollection
中删除过期的cookie。怎么做? 如何从
CookieCollection
中删除过期的cookie


在红色矩形行中,这是第一次单击“获取cookies”时显示的过期cookie,其中显示的过期报告是正确的,但第二次应将其从
CookieCollection

中完全删除。只有为每个cookie设置

using System;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;
using System.Web;
using Newtonsoft.Json;

namespace SetGetMultipleCookies
{
    public partial class GetSetCookiesForm : Form
    {
        string readCookiesUrl = "http://test.dev/_test/cookies/readcookie.php";
        string setCookiesUrl = "http://test.dev/_test/cookies/setcookie.php";
        CookieContainer cookieHeader = new CookieContainer();
        CookieCollection cookie_collection = new CookieCollection();

        public GetSetCookiesForm()
        {
            InitializeComponent();
        }

        private void getCookiesButton_Click(object sender, EventArgs e)
        {
            // begins variable for page content.
            string pageSource;
            // send url request to web page.
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(this.readCookiesUrl);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            foreach (Cookie each_cookie in this.cookie_collection)
            {
                if (!each_cookie.Expired)
                {
                    request.Headers.Add("Cookie", each_cookie.ToString());
                } else
                {
                    // how to remove an expired cookie from cookie collection?

                }
            }

            // read the page content
            using (StreamReader sr = new StreamReader(response.GetResponseStream()))
            {
                pageSource = sr.ReadToEnd();
            }

            // display debug.
            resultBox.Text = pageSource + "\r\n";
            foreach (Cookie each_cookie in this.cookie_collection)
            {
                resultBox.Text += each_cookie.ToString() + "; expires=" + each_cookie.Expires + "; path=" + each_cookie.Path + ";domain=" + each_cookie.Domain + "\r\n";
                if (each_cookie.Expired)
                {
                    resultBox.Text += "cookie expired.\r\n";
                }
            }
        }

        private void setCookiesButton_Click(object sender, EventArgs e)
        {
            // send url request to set cookie.
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(this.setCookiesUrl);
            request.Method = "GET";
            request.CookieContainer = this.cookieHeader;
            request.ContentType = "application/x-www-form-urlencoded";
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            // set cookies
            this.cookie_collection = response.Cookies;
            // debug
            resultBox.Text = "Headers ==========\r\n";
            foreach (string each_header in response.Headers)
            {
                resultBox.Text += each_header + " = " + response.Headers[each_header] + "\r\n";
            }
            resultBox.Text += "\r\nCookies (" + response.Cookies.Count + ") ==========\r\n";
            foreach (Cookie each_cookie in response.Cookies)
            {
                resultBox.Text += each_cookie.ToString() + "\r\n";
                resultBox.Text += each_cookie.Name + "\r\n";
                resultBox.Text += each_cookie.Value + "\r\n";
                resultBox.Text += each_cookie.Expires + "\r\n";
                resultBox.Text += each_cookie.Path + "\r\n";
                resultBox.Text += each_cookie.Domain + "\r\n";
                resultBox.Text += each_cookie.Secure + "\r\n";
                resultBox.Text += each_cookie.HttpOnly + "\r\n";
                resultBox.Text += each_cookie.Expired + "\r\n";
                resultBox.Text += "\r\n";
            }
            // get response body.
            using (Stream responseStream = response.GetResponseStream())
            {
                StreamReader reader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8"));
                String responseText = reader.ReadToEnd();
                // json decode
                //LoginResponse responsej = JsonConvert.DeserializeObject<LoginResponse>(responseText);
                // display debug.
                resultBox.Text += "Response body ==========\r\n";
                resultBox.Text += responseText + "\r\n";
            }
        }

        private void removeCookiesButton_Click(object sender, EventArgs e)
        {
            this.cookieHeader = new CookieContainer();
            this.cookie_collection = new CookieCollection();

            resultBox.Text = "Logged out.";
        }
    }
}
另外,您可以尝试使用
Clear()
方法来清除
Cookies

// clear cookies server side
HttpContext.Current.Request.Cookies.Clear();
如果要删除您已知名称的
Cookie
,可以设置
过期时间,如下所示,以便在时间自动到达时删除
Cookie

if (Request.Cookies["cookiename"] != null)
{
    Response.Cookies["cookiename"].Expires = DateTime.Now.AddDays(-1);   
}
有时
会话
相关
cookie
不会自动删除。为此,您可以尝试以下一个

HttpContext.Current.Session.Abandon();
HttpContext.Current.Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
您可以编写一个单独的方法来实现这一点,如下所示

private void ExpireAllCookies()
{
    if (HttpContext.Current != null)
    {
        int cookieCount = HttpContext.Current.Request.Cookies.Count;
        for (var i = 0; i < cookieCount; i++)
        {
            var cookie = HttpContext.Current.Request.Cookies[i];
            if (cookie != null)
            {
                var cookieName = cookie.Name;
                var expiredCookie = new HttpCookie(cookieName) {Expires = DateTime.Now.AddDays(-1)};
                HttpContext.Current.Response.Cookies.Add(expiredCookie); // overwrite it
            }
        }

        // clear cookies server side
        HttpContext.Current.Request.Cookies.Clear();
    }
}
private void expirealcookies()
{
if(HttpContext.Current!=null)
{
int cookieCount=HttpContext.Current.Request.Cookies.Count;
对于(变量i=0;i