Question

J'ai le code suivant qui définit 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);

Cependant, lorsque j'essaie de lire le cookie, la valeur est Null. Le cookie existe. Si je vérifie:

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

Aide?

Était-ce utile?

La solution

La vérification est faite après un post retour? Si c'est le cas, vous devriez plutôt lire le cookie de la collection Request.

Les cookies sont conservés dans le navigateur en les ajoutant à Response.Cookies et sont relus à partir de Request.Cookies.

Les cookies ajoutés à Response ne peuvent être lus que si la page se trouve sur la même demande.

Autres conseils

La réponse la plus probable est visible sur ce message

  

Lorsque vous essayez de vérifier l'existence d'un cookie en utilisant l'objet Response plutôt que Reqest, ASP.net crée automatiquement un cookie.

Modifier: En guise de remarque, j'ai fini par écrire un logiciel qui devait vérifier l'existence de cookies qu'ASP.NET fait un cauchemar en raison de leur API de cookie. J'ai fini par écrire un processus de conversion qui extrait les cookies de la demande et rend mon état object. À la fin de la demande, je traduis ensuite mon objet d'état en cookies et les fourre dans la réponse (si nécessaire). Cela simplifie le travail en essayant de déterminer si des cookies sont dans la réponse, de les mettre à jour à la place, en évitant de créer des cookies inutiles, etc.

.

Avez-vous fatigué " Demander " collection au lieu de " Response " collection?

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

Je pense connaître la réponse.

SUPPRIMEZ simplement l'attribut d'action dans votre <form> balise.

faites-le ressembler à ceci: <form id="form1" runat="server">

au lieu de ceci: <form id="form1" action="DisplayName.aspx" runat="server">

Vous devriez alors utiliser Response.Redirect("DisplayName.aspx"); dans votre code.

Si vous compilez en mode débogage, activez le traçage pour les pages en question et assurez-vous que le cookie se trouve dans la collection de demandes. Définissez la trace dans la directive @page du fichier aspx.

Essayez cet extrait -

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; pour le lire -

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

J'ai eu un problème similaire, je ne pouvais pas lire les cookies lors de la publication. Le problème pour moi est que j'ai vérifié la propriété Secure du cookie sur true. Il est dit que lorsque la propriété Secure du cookie est activée, le cookie n'est transmis que si la connexion utilise la couche Secure Sockets Layer. Cependant, je ne sais pas comment j'ai pu voir le cookie dans le navigateur la première fois, mais pas lors de la publication (postback), étant donné que je ne transmettais pas via SSL. Quoi qu'il en soit, en tournant le cookie. Sécurisez sur false, résolvez le problème et faites lire les cookies en postback.

Désolé si cela n'a rien à voir avec votre problème, je souhaitais le partager, car j'ai passé un certain temps à chercher des solutions.

J'aimerais ajouter ceci en tant que commentaire à la réponse de Chris Marisic, mais je n'ai pas ce privilège: - (

Suite à ce que Chris a dit dans son édition sur la suppression des cookies de la demande, pour pouvoir lire la valeur des cookies nouvellement créés dans une publication que j'ai fini par faire

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

Les lignes Request.Cookies.Remove et Request.Cookies.Add le rendant efficace sur les publications

utilisez Response.Cookies.Add (cookie); au lieu de Response.Cookies.Set (cookie);

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top