이것은 내 코드입니다. 한 번에 여러 쿠키를 가져 오거나 설정하거나 제거합니다. 설정 및 제거 (모두) 잘 작동하지만 만료 된 쿠키를 CookieCollection
에서 삭제할 수는 없습니다. getCookiesButton_Click
방법에서 CookieCollection에서 쿠키를 제거하는 방법은 무엇입니까?
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.";
}
}
}
, 방금
CookieCollection
에서 만료 된 쿠키를 제거 할. 그렇게하는 방법? 만료 된 쿠키를 제거하는 방법
CookieCollection
? 빨간색 사각형 라인에서
, 즉
에 클릭은 그것이이 CookieCollection
에서 완전히 제거해야 올바른하지만 두 번째입니다 만료 된 보고서가 보여주는 쿠키를 받기 만료 된 쿠키 처음이다 .
어쨌든 무엇을하려하십니까? 왜 모두 수동으로합니까? 대개 그런 방식은 아닙니다.이 수업은 배후에서 함께 작동하도록 설계되었습니다. 이 CookieContainer 클래스는 종종 필요한 모든 것입니다.이 클래스는 쿠키 캐싱을 처리하고 만료 된 쿠키를 제거하고 다양한 쿠키를 코어 탭 URL로 올바르게 처리합니다. "쿠키 처리"는 CookieContainer 및 WebClient 인스턴스를 만들고 쿠키 컨테이너를 사용하도록 설정 한 다음 웹 클라이언트를 사용하여 요청을 생성하는 것입니다. 리디렉션을 따라 가며 지루한 것들을 모두 처리해줍니다. – quetzalcoatl
~> http://stackoverflow.com/questions/1777221/using-cookiecontainer-with-webclient-class etc? – quetzalcoatl
@quetzalcoatl Rest API를 사용하여 웹 서버와 연결되어있는 클라이언트 프로그램을 만들고 싶습니다. 로그인과 같은 많은 쿠키, 일부 설정 값을 사용합니다. VC# 및 C# 언어에 익숙하지 않아서 익숙하지 않아 쿠키를 처리하는 가장 좋은 방법이 무엇인지 알지 못합니다. 이것에 대한 예제와 튜토리얼은 많지 않습니다. 고맙습니다. 나는 그것을 곧 시도 할 것이다. – vee