2008-10-16 21 views
14

Tengo el siguiente código que establece una cookie:Cookies pierde valor en ASP.net

string locale = ((DropDownList)this.LoginUser.FindControl("locale")).SelectedValue; 
    HttpCookie cookie = new HttpCookie("localization",locale); 
    cookie.Expires= DateTime.Now.AddYears(1); 
    Response.Cookies.Set(cookie); 

Sin embargo, cuando trato de leer la cookie, el valor es nulo. La cookie existe. Nunca supero lo siguiente si el cheque:

  if (Request.Cookies["localization"] != null && !string.IsNullOrEmpty(Request.Cookies["localization"].Value)) 

¿Ayuda?

+0

Use LiveHTTPHeaders para ver si la cookie está siendo devuelto a el navegador. http s: //addons.mozilla.org/en-US/firefox/addon/3829 –

+0

No olvides aceptar una respuesta para la pregunta –

Respuesta

41

El control se realiza después de una publicación? Si es así, debería leer la cookie de la colección Request en su lugar.

Las cookies se conservan en el navegador agregándolas a Response.Cookies y se leen desde Request.Cookies.

Las cookies agregadas a Response solo se pueden leer si la página está en la misma solicitud.

+0

No estoy seguro de por qué Response.Cookies está eliminando valores, pero gracias. Me salvaste mucho tiempo. –

0

¿Ha caído la colección "Solicitar" en lugar de la colección "Respuesta"?

 
if (Request.Cookies["localization"] != null && !string.IsNullOrEmpty(Request.Cookies["localization"].Value)) 
-1

use Response.Cookies.Add (cookie); en lugar de Response.Cookies.Set (cookie);

0

Prueba este fragmento -

string locale = ((DropDownList)this.LoginUser.FindControl("locale")) 
                .SelectedValue; 
HttpCookie myCookie = new HttpCookie("localization"); 
Response.Cookies.Add(myCookie); 
myCookie.Values.Add("locale", locale); 
Response.Cookies["localization"].Expires = DateTime.Now.AddYears(1); 

& para leerlo -

if (Request.Cookies["localization"] != null) 
{ 
    HttpCookie cookie = Request.Cookies["localization"]; 
    string locale = cookie.Values["locale"].ToString(); 
} 
0

si se está compilando en modo de depuración, activar el seguimiento de las páginas en cuestión y asegurarse de que la cookie es en la colección de solicitud. Establezca el seguimiento en la directiva @page en el archivo aspx.

0

Tuve un problema similar, no pude leer las cookies en la devolución. El problema para mí fue que revisé la propiedad segura de la cookie en verdadero. Se dice que cuando la propiedad Secure de la cookie está activada, hace que la cookie se transmita solo si la conexión usa Secure Sockets Layer. No estoy seguro, sin embargo, de cómo pude ver la cookie en el navegador la primera vez, pero no en la devolución de datos, teniendo en cuenta que no estaba transmitiendo a través de SSL. De todos modos, convertir la cookie. Segura a falso, solucionó el problema y las cookies se leyeron en la devolución de datos.

Disculpe si esto no tiene que ver con su problema, quería compartir esto, porque pasé un tiempo buscando cómo resolverlo.

17

La respuesta más probable es que se ve en this post

Cuando intenta comprobar la existencia de un objeto usando la respuesta de galletas en lugar de Reqest, ASP.net crea automáticamente una cookie.

Editar: Como nota, terminé escribiendo software que necesita para comprobar la existencia de las cookies que ASP.NET hace una pesadilla debido a su API de galleta. Terminé escribiendo un proceso de conversión que toma las cookies de la solicitud y crea mi objeto de estado. Al final de la solicitud, vuelvo a traducir mi objeto de estado a cookies y las incluyo en la respuesta (si es necesario). Esto alivia tratar de averiguar si las cookies están en la respuesta, actualizarlas en su lugar, evitar la creación de cookies inútiles, etc.

+1

Acabo de cometer este error menor, el uso del objeto Response para leer las cookies me estaba eliminando las cookies. Esto fue una ayuda. Gracias. – kstubs

1

Creo que sé la respuesta.

Solo EXTRAIGA el atributo de acción en su etiqueta <form>.

que se vea como esto: <form id="form1" runat="server">

en lugar de esto: <form id="form1" action="DisplayName.aspx" runat="server">

A continuación, debe utilizar Response.Redirect("DisplayName.aspx"); en el código.

0

añadiría esto como un comentario a la respuesta de Chris Marisic pero no tengo que privelage :-(

En relación con lo que dijo Chris en su edición sobre la eliminación de cookies de la solicitud, para ser capaz de leer el valor de las galletas recién creado en una devolución de datos que terminó haciendo

Private Sub SetPageSize(ByVal pageSize As Integer) 

    ' Set cookie value to pageSize 
    Dim pageSizeCookie As HttpCookie = New HttpCookie(pageSizeCookieName) 
    With pageSizeCookie 
     .Expires = Now.AddYears(100) 
     .Value = pageSize.ToString 
    End With 

    ' Add to response to save it 
    Me.Response.Cookies.Add(pageSizeCookie) 

    ' Add to request so available for postback 
    Me.Request.Cookies.Remove(pageSizeCookieName) 
    Me.Request.Cookies.Add(pageSizeCookie) 

End Sub 

las líneas Request.Cookies.Remove y Request.Cookies.Add hacer que funcione en las devoluciones de datos

Cuestiones relacionadas