2012-08-09 21 views
6

Tengo un problema al pasar cookies en ASP.NET a una nueva URL. Añado cookies para la respuesta de este modo:Pasando cookies en Response.Redirect en ASP.NET

Response.Cookies.Add(new HttpCookie("Username", Username.Text)); 

entonces una redirección:

Response.Redirect(returnURL);

En la nueva página que estoy redirigido a la colección de cookies está vacía. Trato de recuperar una cookie de este modo:

Request.Cookies["Username"].Value;

Puede alguien pensar en por qué no se están pasando las galletas?

EDIT:

Más información me olvidó añadir - en el segundo intento dentro de la misma sesión del navegador, las galletas se pasan correctamente con la redirección.

EDIT # 2: He encontrado que si utilizo "localhost" en lugar del nombre de dominio real en la URL de redireccionamiento, las cookies se pasan correctamente al primer inicio de sesión. Así que es solo cuando la URL de redirección es el nombre de dominio real que no funciona. Extraño.

+2

Esto es similar a esta pregunta http://stackoverflow.com/q/5366635/52136 –

+0

Gracias, pero esto me sucede en IE9, FF, Chrome y Safari. Además, acabo de agregar algo más de información que olvidé agregar inicialmente. – tuseau

+0

Posible duplicado de [Envío de cookies del navegador durante un redireccionamiento 302] (https://stackoverflow.com/questions/4694089/sending-browser-cookies-during-a-302-redirect) –

Respuesta

2
protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     if (Request.QueryString["AcceptsCookies"] == null) 
     { 
      Response.Cookies["TestCookie"].Value = "ok"; 
      Response.Cookies["TestCookie"].Expires = 
       DateTime.Now.AddMinutes(1); 
      Response.Redirect("TestForCookies.aspx?redirect=" + 
       Server.UrlEncode(Request.Url.ToString())); 
     } 
     else 
     { 
      Label1.Text = "Accept cookies = " + 
       Server.UrlEncode(
       Request.QueryString["AcceptsCookies"]); 
     } 
    } 
} 

This link le ayudará a comprender la lectura y escritura de las galletas en C#.

También, this page sería útil en caso de que esté familiarizado con VB más que C#.

3

Los navegadores solo envían cookies a páginas del mismo dominio que la página que configuró la cookie.

Así que si vas a la página http://localhost/login.aspx y el servidor a continuación, procede a establecer una cookie y redirigir (por ejemplo) http://mymachinename/default.aspx, la cookie no se enviará desde el navegador al servidor cuando se solicita la segunda url porque no es en el mismo dominio

Para recuperar la cookie, tendrá que redireccionar a http://localhost/default.aspx o tendrá que empezar yendo originalmente al http://mymachinename/login.aspx.

3

Según HTTP State Management Mechanism

servidores de origen puede enviar una cabecera de respuesta Set-Cookie con cualquier respuesta
. Los agentes de usuario pueden ignorar los encabezados Set-Cookie contenidas en
respuestas con los códigos de estado 100 de nivel, sino que debe procesar Set-Cookie
encabezados contenidos en otras respuestas (incluyendo respuestas con 400-
y 500 a nivel de los códigos de estado). Un servidor de origen puede incluir múltiples campos de encabezado Set-Cookie
en una sola respuesta. La presencia de un campo de cookie
o un campo de encabezado Set-Cookie no impide que las cachés HTTP
almacenen y reutilicen una respuesta.

Por lo tanto, los REDIRECTs (3xx) están en las "otras" respuestas, por lo que el navegador los debe procesar, y luego pueden soltarlos por todo tipo de razones. Una de las causas del navegador que rechaza la cookie es cuando el atributo de dominio de la cookie se especifica y no tiene suficientes puntos (como 'localhost') o cuando el atributo de la ruta de la cookie no coincide con la ruta real en la URL (la ruta de la cookie es sensible a mayúsculas y minúsculas).

0

Normalmente hago que mi servidor produzca una cadena Base64 que recupero mediante ajax. Cuando el objeto listo está disponible, entonces hago el 'archivo adjunto' de la cadena base 64 en el cliente. De esa manera, puedo responder de manera consistente en todos los navegadores a una descarga completa.

Cuestiones relacionadas