2012-01-30 7 views
5

Une fois la connexion établie, je souhaite enregistrer un cookie contenant le nom d'utilisateur.Session perdue lors de l'enregistrement du cookie

Le cookie enregistre correctement et charge le nom d'utilisateur correctement mais perd la session!

Le code pour récupérer le nom d'utilisateur est:

if (Request.Cookies["userName"] != null) 
{ 
    txtEmail.Text = Request.Cookies["username"].Value; 
    chkRemember.Checked = true; 
} 

Le code pour enregistrer le nom d'utilisateur est:

HttpCookie aCookie = new HttpCookie("username"); 
aCookie.Value = txtEmail.Text; 
aCookie.Expires = DateTime.Now.AddYears(5); 
Response.Cookies.Add(aCookie); 

Toute aide sera grandement appréciée, merci

+3

Que voulez-vous dire par session? Session ASP.NET? Ou forme une session d'authentification? Aussi quelles actions effectuez-vous exactement? Fermez-vous le navigateur entre les deux? –

+0

La session ASP.NET est en cours de réinitialisation lors de la navigation du formulaire de connexion au formulaire suivant. C'est seulement après avoir ajouté le code ci-dessus. –

+0

Le code ci-dessus est-il dans le formulaire de connexion, ou ailleurs? – M3NTA7

Répondre

1

j'ai vu récemment un article qui a suggéré que dans les noms de underscores page peuvent causer des problèmes dans les cookies, je n'ai pas examiné cela, mais il pourrait être utile de vérifier.

Alternativement, est-ce que vous effacez vos cookies si l'utilisateur ne choisit pas d'être rappelé?

J'ai vu un ancien exemple récemment sur MSDN montrant la méthode de suppression qui va vider votre session ... read the article. Si oui, assurez-vous de ne supprimer que le cookie pour la connexion sinon vous risquez de perdre le cookie contenant le fichier session.

A (très) traduction rapide en csharp du code de l'article:

for (int i = 0; i < limit; i++) 
    { 
     cookieName = Request.Cookies[i].Name; 
     aCookie = new HttpCookie(cookieName); 
     aCookie.Expires = DateTime.Now.AddDays(-1); 
     Response.Cookies.Add(aCookie); 
    } 

Avec la solution étant l'ajout d'un contrôle sur le nom du cookie.

for (int i = 0; i < limit; i++) 
    { 
     cookieName = Request.Cookies[i].Name; 
     if (cookieName == "username") 
     { 
      aCookie = new HttpCookie(cookieName); 
      aCookie.Expires = DateTime.Now.AddDays(-1); 
      Response.Cookies.Add(aCookie); 
     } 
    } 

N'oubliez pas que vous pouvez utiliser des sous-clés dans les cookies.

+0

Excellent merci, les variables de session étaient perdues quand je ne me souvenais pas du cookie de déni de nom, je supprimais tous les objets cookie y compris l'identifiant de session. Merci encore. –

2

Bit d'un coup sauvage , mais passez-vous de https à http? Par exemple. formulaire de connexion est https, la page suivante est http

Si oui, la plupart des navigateurs vont abandonner les cookies de session.

Merci, Fran

+0

ne pas utiliser https, cela ne s'applique pas. Je vous remercie. –

Questions connexes