No estoy seguro de cómo CookieContainer maneja el dominio, así que creo esta prueba. Esta prueba muestra que cookieContainer no devuelve ninguna cookie para "example.com" pero de acuerdo con RFC debe devolver al menos 2 cookies.CookieContainer error?
¿No es un error?
¿Cómo hacer para que funcione?
Aquí está una discusión acerca de este error:
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>
Lo he intentado muchas veces antes también. Terminé leyendo el encabezado de la cookie y almacenándola en otro lugar. – Nippysaurus
Tengo que usar CookieContainer porque es la única forma de enviar cookies a HttpWebRequest. – Salar
No puedo creer que finalmente tuve un escenario donde cambiar el marco de 4.0 a 3.5 (no estaba usando 4.0 cosas) rompió mi programa.Me llevó algo de tiempo averiguar por qué las cookies de sesión para la autenticación de repente no estaban. Solucionaron este problema en 4.0, por lo que cambiar el marco introdujo un error en mi programa :-) – VVS