Question

Quelles sont les étapes requises pour la présentation d'un cookie pour persister après un navigateur est fermé? En ce moment je:

  1. createPersistentCookie ensemble à true sur événement LoggedIn.
  2. MachineKey spécifié.
  3. formes coulissantes jeu d'expiration à true.

Tant que le navigateur est ouvert, l'utilisateur restera connecté, mais dès qu'il est fermé, et il n'a pas d'importance pour combien de temps, l'utilisateur devra se connecter à nouveau. Qu'est-ce que je manque?

EDIT: Je suis passé par l'article fait par marapet (voir les commentaires ci-dessous) et il m'a fait intéressé à savoir si le billet a en effet drapeau isPersistent, ce qu'il fait. Les regards des billets déchiffré comme celui-ci: System.Web.Security.FormsAuthentication.Decrypt(Request.Cookies[System.Web.Security.FormsAuthentication.FormsCookieName].Value) {System.Web.Security.FormsAuthenticationTicket} CookiePath: "/" Expiration: {19/08/2010 17:27:14} Expired: false IsPersistent: true IssueDate: {19/07/2010 17:27:14} Name: "alex" UserData: "" Version: 2 Tous les détails sont corrects, et correspondent à ceux de I événement LoggedIn. Plus sur la valeur du cookie je peux récupérer à partir du cookie directement, est identique à celui-ci. Pourtant, dès que je ferme le navigateur, le cookie est perdu.

Ce que je constate, cependant, est que le cookie portant le ticket l'a remise à zéro de date pour une raison quelconque. Tout d'abord, je ne peux pas remplacer les paramètres dans web.config, donc à la fin de l'événement LoggedIn il est la propriété expires est de 4000 minutes après la date d'émission, pas un mois que je suis en train de programmation. Puis, après chargement de la page le cookie je récupère avec FormsAuthentication.FormsCookieName a la propriété expires 01/01/0001. Je pense que peut-être c'est là que réside problème? Toute pensée serait apprécié.

EDIT # 2: Je modifie à la fois le titre et les balises pour inclure session, car il est avéré pertinent pour le problème / solution

Était-ce utile?

La solution

Alors j'ai trouvé la solution, par la suite. Comme il se trouve, ce ne fut pas le problème avec le cookie d'authentification en tant que tel (il a été retenu correctement, ou aurait plutôt été si le gestionnaire n'a pas l'enlever, après avoir incorrectement décidé qu'un utilisateur n'a pas été connecté sur la base la session manquante). Le problème est que le cookie de session a été perdu ou n'a pas été identifié correctement. Donc, le correctif a été d'ajouter manuellement un cookie de session lors de la connexion comme ceci:

HttpCookie authCookie = new HttpCookie("ASP.NET_SessionId", Session.SessionID);
authCookie.Domain = ".mydomain.com";
authCookie.Expires = DateTime.Now.AddMonths(1);
Response.Cookies.Add(authCookie);

Maintenant, quand les navigateurs ouvre à nouveau la session est identifiée correctement et session utilisateur restauré.

Autres conseils

Une des formes persistantes cookie d'authentification ne doit pas être mis au rebut lorsque la fermeture du navigateur. Il reste valide pour la valeur du délai défini dans le web.config.

Cependant, certains navigateurs peuvent être configurés pour rejeter tous les cookies à la fin d'une session - vous pouvez vouloir vérifier les paramètres de votre navigateur. (FireFox: Outils - Options - de la vie privée)

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