C# 如何从CookieCollection中删除cookie?
这是我的密码。一次获取/设置/删除多个Cookie是非常困难的。Set和remove(all)工作正常,但我不能从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
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