Domanda

Ho il seguente codice che imposta un 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);

Tuttavia, quando provo a leggere il cookie, il valore è Null. Il cookie esiste Non riesco mai a superare il seguente controllo:

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

Aiuto?

È stato utile?

Soluzione

Il controllo viene eseguito dopo un post indietro? In tal caso, dovresti invece leggere il cookie dalla raccolta Richieste.

I cookie vengono persistiti nel browser aggiungendoli a Response.Cookies e vengono riletti da Request.Cookies.

I cookie aggiunti a Response possono essere letti solo se la pagina si trova sulla stessa richiesta.

Altri suggerimenti

La risposta più probabile si trova su questo post

  

Quando si tenta di verificare l'esistenza di un cookie utilizzando l'oggetto Response anziché Reqest, ASP.net crea automaticamente un cookie.

Modifica: Come nota, ho finito per scrivere software che doveva verificare l'esistenza di cookie che ASP.NET crea un incubo a causa della loro API dei cookie. Ho finito per scrivere un processo di conversione che prende i cookie dalla richiesta e rende il mio stato oggetto. Alla fine della richiesta, traduco nuovamente il mio oggetto di stato in cookie e li inserisco nella risposta (se necessario). Ciò ha alleviato il tentativo di capire se i cookie sono nella risposta, per aggiornarli invece, evitando la creazione di cookie inutili ecc.

Sei stanco " Richiesta " raccolta anziché " Risposta " collezione?

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

Penso di conoscere la risposta.

RIMUOVI l'attributo action nel tuo tag <form>.

fallo apparire così: <form id="form1" runat="server">

invece di questo: <form id="form1" action="DisplayName.aspx" runat="server">

Dovresti quindi utilizzare Response.Redirect("DisplayName.aspx"); nel tuo codice.

se stai compilando in modalità debug, attiva la traccia per le pagine in questione e assicurati che il cookie sia nella raccolta richieste. Impostare la traccia nella direttiva @page nel file aspx.

Prova questo snippet -

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

amp; per leggerlo -

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

Ho avuto un problema simile, non sono riuscito a leggere i cookie sul postback. Il problema per me era che ho verificato la proprietà Secure del cookie su true. Si dice che quando la proprietà Secure del cookie è attivata, provoca la trasmissione del cookie solo se la connessione utilizza Secure Sockets Layer. Non sono sicuro, tuttavia, di come sia stato possibile visualizzare i cookie nel browser per la prima volta, ma non sul postback, considerando che non stavo trasmettendo tramite SSL. Ad ogni modo, trasformando il cookie. Sicuro su falso, risolto il problema e fatto leggere i cookie sul postback.

Mi dispiace se questo non ha nulla a che fare con il tuo problema, volevo condividerlo, perché ho trascorso un po 'di tempo a cercare come risolverlo.

Aggiungo questo come commento alla risposta di Chris Marisic ma non ho quel privilegio :-(

Oltre a ciò che Chris ha detto nella sua modifica sulla rimozione dei cookie dalla richiesta, per poter leggere il valore dei cookie appena creato in un postback che ho finito per fare

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 e Request.Cookies.Aggiungi righe per farlo funzionare sui postback

usa Response.Cookies.Add (cookie); anziché Response.Cookies.Set (cookie);

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top