2008-10-16 7 views
14

Je le code suivant qui définit un cookie:Cookie perd de sa valeur dans 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); 

Cependant, lorsque je tente de lire le cookie, la valeur est nulle. Le cookie existe. Je ne suis jamais en mesure de vérifier ce qui suit:

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

Aide?

+0

Utilisez livehttpheaders pour voir si le cookie est retourné à le navigateur: http s: //addons.mozilla.org/fr-fr/firefox/addon/3829 –

+0

N'oubliez pas d'accepter une réponse à la question –

Répondre

41

La vérification est effectuée après un retour? Si c'est le cas, vous devriez lire le cookie de la collection Request à la place. Les cookies sont conservés dans le navigateur en les ajoutant à Response.Cookies et sont lus à partir de Request.Cookies.

Les cookies ajoutés à la réponse peuvent être lus seulement si la page est sur la même demande.

+0

Vous ne savez pas pourquoi Response.Cookies supprime des valeurs, mais merci. Tu m'as sauvé beaucoup de temps. –

0

Avez-vous fatigué la collection "Demande" au lieu de la collection "Réponse"?

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

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

0

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

& pour le lire -

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

si vous compilez en mode débogage, activer le suivi pour les pages en question et assurez-vous que le cookie est dans la collection de requêtes. Définissez trace dans la directive @page dans le fichier ASPX.

0

J'ai eu un problème similaire, je ne pouvais pas lire les cookies sur la publication. Le problème pour moi était que j'ai vérifié la propriété Secure du cookie à true. Il est dit que lorsque la propriété Secure du cookie est activée, le cookie est transmis uniquement si la connexion utilise la couche Secure Sockets. Je ne suis pas sûr, cependant, comment j'ai pu voir le cookie dans le navigateur la première fois, mais pas en postback, étant donné que je ne transmettais pas via SSL. Quoi qu'il en soit, en tournant le cookie.Secure à faux, résolu le problème, et les cookies ont été lus sur la publication. Désolé, si cela n'a rien à voir avec votre problème, je voulais partager cela, parce que j'ai passé du temps à chercher comment résoudre ce problème.

17

La réponse la plus probable est vu sur this post

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

Edit: Comme note, je fini par un logiciel d'écriture qui avait besoin de vérifier l'existence de cookies ASP.NET fait un cauchemar en raison de leur API cookie. J'ai fini par écrire un processus de conversion qui prend les cookies de la requête et rend mon objet d'état. À la fin de la demande, je traduis ensuite mon objet d'état en cookies et les place dans la réponse (si nécessaire). Cela a atténué essayer de comprendre si les cookies sont dans la réponse, de les mettre à jour à la place, en évitant de créer des cookies inutiles, etc

+1

Je viens de faire cette erreur junior, en utilisant l'objet de réponse à lire les cookies était en train d'effacer les cookies! C'était une aide. Merci. – kstubs

1

Je pense que je connais la réponse.RETIREZ l'attribut d'action dans votre balise <form>

font 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.

0

ajouterions cela comme un commentaire à la réponse de Chris Marisic mais je n'ai pas privelage :-(

Suite à ce que Chris a dit dans son édition sur la suppression des cookies de la demande, pour être en mesure de lire la nouvellement créé de la valeur des cookies dans un postback je 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 faire fonctionner sur postbacks