Ich bin verwirrt, wie CookieContainer Domain behandelt, also erstelle ich diesen Test. Dieser Test zeigt, dass cookieContainer kein Cookie für "example.com" zurückgibt, aber gemäß RFC mindestens 2 Cookies zurückgeben soll.CookieContainer Bug?
Ist es nicht ein Fehler?
Wie funktioniert es? Hier
ist eine Diskussion über diesen Fehler:
http://social.msdn.microsoft.com/Forums/en-US/ncl/thread/c4edc965-2dc2-4724-8f08-68815cf1dce6
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Net" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
CookieContainer getContainer()
{
CookieContainer result = new CookieContainer();
Uri uri = new Uri("http://sub.example.com");
string cookieH = @"Test1=val; domain=sub.example.com; path=/";
result.SetCookies(uri, cookieH);
cookieH = @"Test2=val; domain=.example.com; path=/";
result.SetCookies(uri, cookieH);
cookieH = @"Test3=val; domain=example.com; path=/";
result.SetCookies(uri, cookieH);
return result;
}
void Test()
{
CookieContainer cookie = getContainer();
lblResult.Text += "<br>Total cookies count: " + cookie.Count + " expected: 3";
Uri uri = new Uri("http://sub.example.com");
CookieCollection coll = cookie.GetCookies(uri);
lblResult.Text += "<br>For " + uri + " Cookie count: " + coll.Count + " expected: 2";
uri = new Uri("http://other.example.com");
coll = cookie.GetCookies(uri);
lblResult.Text += "<br>For " + uri + " Cookie count: " + coll.Count + " expected: 2";
uri = new Uri("http://example.com");
coll = cookie.GetCookies(uri);
lblResult.Text += "<br>For " + uri + " Cookie count: " + coll.Count + " expected: 2";
}
protected void Page_Load(object sender, EventArgs e)
{
Test();
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>CookieContainer Test Page</title>
</head>
<body>
<form id="frmTest" runat="server">
<asp:Label ID="lblResult" EnableViewState="false" runat="server"></asp:Label>
</form>
</body>
</html>
Ich habe das schon viele Male zuvor auch versucht. Ich habe den Cookie-Header selbst gelesen und woanders gespeichert. – Nippysaurus
Ich muss CookieContainer verwenden, da es die einzige Möglichkeit ist, Cookies an HttpWebRequest zu senden. – Salar
Ich kann nicht glauben, dass ich endlich ein Szenario hatte, in dem das Framework von 4.0 auf 3.5 geändert wurde (ich benutzte keine 4.0 Sachen), brach mein Programm.Ich brauchte einige Zeit, um herauszufinden, warum die Session-Cookies für die Authentifizierung plötzlich fehlten. Sie haben dieses Problem in 4.0 behoben, also hat das Ändern des Frameworks einen Fehler in mein Programm eingeführt :-) – VVS