Question

Après avoir cherché beaucoup je n'ai pas de réponses et enfin j'ai dû revenir à vous. Ci-dessous je vous explique mon problème en détail. Il est trop long, alors s'il vous plaît ne quittez pas la lecture. Je l'ai expliqué mon problème dans un langage simple.

je développe un projet mvc asp.net. J'utilise des rôles ASP.NET standard et l'adhésion. Tout fonctionne bien, mais le souvenir de moi fonctionnalité ne fonctionne pas du tout. Je suis la liste de tous les détails du travail. espérons que vous les gars peuvent me aider à résoudre ce problème.

Je dois simplement ceci:

Je dois utilisateur de se connecter à l'application Web. Lors de la connexion, ils peuvent soit se connecter avec moi se rappeler ou sans elle. Si l'utilisateur se connecte avec moi se rappeler, je veux navigateur pour les retenir pour longtemps, disons atleast un an ou beaucoup de temps. La façon dont ils le font dans www.dotnetspider.com, www.codeproject.com, www.daniweb.com et bien d'autres sites. Si l'utilisateur se connecte sans se souvenir de moi, alors navigateur doit autoriser l'accès au site pendant quelques 20 à 30 minutes, et après que leur session devrait expirer. Leur session devrait également expirer lorsque l'utilisateur se connecte et se ferme sur le navigateur sans se déconnecter.

Note: Je l'ai mis en œuvre avec succès au-dessus de la fonctionnalité sans utiliser les rôles standard et asp.net membres en créant mes propres talbes pour l'utilisateur et l'authentification sur ma table de base de données, la mise en biscuit et de sessions dans mes autres projets. Mais pour ce projet, nous à partir du début utilisé des rôles standard et asp.net membres. Nous pensions que cela va fonctionner et après tout a été construit au moment de l'essai juste ne fonctionnait pas. et maintenant nous ne pouvons pas remplacer les fonctionnalités existantes avec des rôles standard asp.net et l'adhésion de mes propres tables utilisateur personnalisés et toutes les choses, vous comprenez ce que je suis Taling au sujet.

Soit il y a une sorte de bug avec des rôles standard asp.net et les fonctionnalités d'adhésion ou j'ai le concept des rôles standard asp.net et mauvais membres. je l'ai dit ce que je veux ci-dessus. Je pense qu'il est très simple et raisonnable.

Qu'est-ce que je l'ai fait

  1. Formulaire de connexion avec le nom d'utilisateur, mot de passe et se souvenir de moi champ.
  2. Ma mise en web.config:



  3. Mon action du contrôleur, j'ai ceci:

    FormsAuth.SignIn (Username, rememberMe);

    public void SignIn (string userName, bool createPersistentCookie)  {    FormsAuthentication.SetAuthCookie (Username, createPersistentCookie);  }

Maintenant, les problèmes suivants:

Je l'ai déjà dit dans la section ci-dessus « Je dois tout simplement cela. » l'utilisateur peut se connecter avec succès au système. Leur session existe pour autant minutes comme indiqué dans la valeur de délai d'attente web.config. J'ai aussi donné un échantillon de mon web.config. Dans mon samplem si je mets le délai d'attente à 5 minutes, puis session utilisateur expire après 5 minutes, c'est ok. Mais si l'utilisateur ferme le navigateur et rouvrez le navigateur, l'utilisateur peut encore entrer dans le site sans loggin dans le temps jusqu'à ce spécifié dans « délai d'attente » n'a pas perdu connaissance. L'expiration de glissement pour la valeur de dépassement de temps fonctionne aussi bien. Maintenant, si l'utilisateur se connecte au système avec remember me vérifié, la session utilisateur expire toujours au bout de 5 minutes. Ce n'est pas un bon comportement, est-il ?. Je veux dire que si l'utilisateur se connecte au système avec remember me vérifié il faut se rappeler pendant longtemps jusqu'à ce qu'il ne se connecte pas du système ou de l'utilisateur ne supprime pas manuellement tous les cookies du navigateur. Si l'utilisateur se connecte au système sans remember me vérifié sa session devrait expirer après les valeurs de la période de temporisation spécifiées dans web.config ainsi que si les utilisateurs ferme le navigateur. Le problème est que si l'utilisateur ferme le navigateur et rouvre, il peut encore entrer dans le site sans vous connecter.

Je recherche Internet beaucoup sur ce sujet, mais je ne pouvais pasla solution. Dans le blog ( http://weblogs.asp.net/ ScottGu / archive / 2005/11/08 / 430011.aspx ) faite par Scott Gu exactement le même sujet. Les utilisateurs se plaignent de la même chose dans leurs commentaires ut il n'y a pas de solution facile donnée par M. Scott.

Je l'ai lu à les lieux suivants: http://weblogs.asp.net/scottgu/archive/2005 /11/08/430011.aspx http://geekswithblogs.net/vivek/archive/2006/09/14 /91191.aspx

Je suppose que cela est un problème de ce des utilisateurs beaucoup. Comme semblent de blog de M. Scott Gu.

Votre aide sera vraiment apprécié. Merci à l'avance.

Était-ce utile?

La solution

Qu'est-ce que vous voulez faire est d'avoir un délai d'attente différent lorsque l'option RememberMe est cochée, que lorsqu'elle est désactivée. Malheureusement, la méthode SetAuthCookie ne, de sorte que vous aurez vous permet pas de régler manuellement l'expiration de faire vous-même.

Le problème est alors, comment faire?

ASP.NET MVC utilise la classe FormsAuthentication de System.Web.Security de le faire, parce que ce n'est pas trivial si vous voulez aussi soutenir les paramètres de configuration et la navigation et SSL cookieless, mais je pense que si vous faites simplement ceci:

int timeout = rememberMe ? 525600 : 30; // Timeout in minutes, 525600 = 365 days.
var ticket = new FormsAuthenticationTicket(userName, rememberMe, timeout);
string encrypted = FormsAuthentication.Encrypt(ticket);
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encrypted);
cookie.Expires = System.DateTime.Now.AddMinutes(timeout);// Not my line
cookie.HttpOnly = true; // cookie not available in javascript.
Response.Cookies.Add(cookie);

... vous obtiendrez une version de base de ce que vous avez besoin.

NOTE:. Je n'ai pas testé ce code

Autres conseils

Kevin et Dave, les gars rock, homme.

Dave, en plus de votre code que je devais ajouter une ligne supplémentaire pour le faire fonctionner. Je veux en faire retenir pour au moins un an. Je devais attribuer une valeur à cookie.Expires en plus de votre code pour le faire fonctionner. Si cette ligne cookie.Expires n'est pas réglé le cookie est perdu après le redémarrage de l'ordinateur que je veux dire à la fin de la session. Je l'ai remarqué dans FireFox. Je suis passé par les détails du cookie et je l'ai trouvé: Si cookie.Expires n'est pas réglé alors la valeur pour « expires: » attribut dans Firefox est « A la fin de la session » mais si cookie.Expires est définie la valeur pour « expires :. » attribut dans Firefox est à la datetime la valeur cookie.Expires a été réglée

Voici le code:

int timeout = createPersistentCookie ? 525600 : 2; // Timeout in minutes,525600 = 365 days
var ticket = new FormsAuthenticationTicket(userName,createPersistentCookie,timeout);            
string encrypted = FormsAuthentication.Encrypt(ticket);
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encrypted);
cookie.Expires = System.DateTime.Now.AddMinutes(timeout);//My Line
HttpContext.Current.Response.Cookies.Add(cookie);

Merci les gars, c'était vraiment une excellente solution.

Juste un petit mot sur l'utilisation de billets auth d'adhésion dans un environnement partagé pour tous ceux qui peuvent se poser ici avec cette question. J'ai un site mvc runnig à GoDaddy et avait du mal à se souvenir de moi. Ce fut la solution:

<system.web>
<machineKey
  validationKey="4C6404A3B305CD6E8CFEAC258F042FB95E45E9C3C2CEC3AAB838996CFBE661E41DF1A1BAC75B9B45E02147612FD9B71CA74DDA50B0D0D6ED11F0BB8E31048953"
  decryptionKey="BC471CF17A97B08A9DF85C7B502AD95680E3BE4418FD9C6CEA57E7F97ED64291"
  validation="SHA1" decryption="AES"
/>

Merci à: http://www.geekfreeq.com/aspnet -rappeler-moi-option-formes-authentification sans travail /

Ce n'est pas un problème, il est une caractéristique:)

n'a pas encore expiré session de l'utilisateur ainsi, même si elles fermer et réouvrir le navigateur, le cookie est toujours bonne.

Il est l'expiration du cookie qui invalident la session de l'utilisateur.

Je l'avais mis en œuvre même chose et quand je le tester, il fonctionne très bien dans Mozila mais ne fonctionne pas dans IE8 pour tous les PC, j'avais aussi mis à jour paramètre pour accepter les cookies dans IE, mais ne fonctionne toujours pas.

Internet Explorer 8.x

  1. Cliquez sur le menu Outils.
  2. Sélectionnez Options Internet dans le menu - une nouvelle fenêtre ouvre.
  3. Cliquez sur l'onglet Confidentialité près du haut de la fenêtre.
  4. Cliquez sur le bouton par défaut de la fenêtre.
  5. Déplacez le curseur pour qu'il soit sur l'un des niveaux inférieurs à moyen élevé (y compris Moyen, Faible, Accepter tous les cookies).
  6. Enregistrer les modifications en cliquant sur OK.
  7. Vous devriez être en mesure d'ajouter des articles à votre panier maintenant.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top