Pregunta

Tengo el siguiente código que establece una cookie:

  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 intento leer la cookie, el valor es nulo. La cookie existe Nunca paso lo siguiente si compruebo:

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

¿Ayuda?

¿Fue útil?

Solución

¿El control se realiza después de una publicación posterior? Si es así, debería leer la cookie de la colección Solicitar.

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

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

Otros consejos

La respuesta más probable se ve en esta publicación

  

Cuando intenta verificar la existencia de una cookie utilizando el objeto Response en lugar de Reqest, ASP.net crea automáticamente una cookie.

Editar: Como nota, terminé escribiendo software que necesitaba verificar la existencia de cookies que ASP.NET hace una pesadilla debido a su API de cookies. Terminé escribiendo un proceso de conversión que toma cookies de la solicitud y hace que mi estado se oponga. Al final de la solicitud, traduzco mi objeto de estado nuevamente a cookies y las relleno en la respuesta (si es necesario). Esto alivió el intento de averiguar si las cookies están en la respuesta, para actualizarlas en su lugar, evitando la creación de cookies sin sentido, etc.

¿Te has cansado " Solicitud " colección en lugar de " Respuesta " colección?

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

Creo que sé la respuesta.

Simplemente RETIRE el atributo de acción en su etiqueta <form>.

haz que se vea así: <form id="form1" runat="server">

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

Debería usar Response.Redirect("DisplayName.aspx"); en su código.

si está compilando en modo de depuración, active el rastreo de las páginas en cuestión y asegúrese de que la cookie esté en la colección de solicitudes. Establezca el rastreo en la directiva @page en el archivo aspx.

Pruebe 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);

& amplificador; para leerlo

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

Tuve un problema similar, no pude leer las cookies en la devolución de datos. El problema para mí fue que verifiqué la propiedad segura de la cookie como verdadera. Se dice que cuando se activa la propiedad Secure de la cookie, hace que la cookie se transmita solo si la conexión utiliza la Capa de sockets seguros. Sin embargo, no estoy seguro de cómo pude ver la cookie en el navegador la primera vez, pero no en la devolución, ya que no estaba transmitiendo a través de SSL. De todos modos, convirtiendo la cookie. Asegúrate en falso, resolvió el problema y las cookies se leyeron en la devolución de datos.

Lo siento, si esto no tiene nada que ver con su problema, quería compartir esto, porque pasé algún tiempo buscando cómo resolverlo.

Agregaría esto como un comentario a la respuesta de Chris Marisic pero no tengo ese privilegio :-(

Además de lo que Chris dijo en su edición sobre la eliminación de cookies de la solicitud, para poder leer el valor de las cookies recién creadas 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

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

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top