ASP.NET MVC 3 - gestion des variables de Session
J'ai une application qui utilise du Formulaire d'Authentification et lorsque l'utilisateur du journal, j'ai récupérer de l'utilisateur, nom réel et l'assigner à une variable de session, comme suit:
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
if (ModelState.IsValid)
{
if (Membership.ValidateUser(model.UserName, model.Password))
{
Session["Name"] = client.GetName(model.UserName);
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
return RedirectToAction("Index", "Home");
}
}
}
Il est ensuite affichée sur mon Index de la vue, comme suit:
<h3>Welcome, @Session["Name"]</h3>
Donc, si mon nom est Bob, elle serait sortie de "Bienvenue, Bob" sur mon point de vue et cela fonctionne bien. Mais une fois que je naviguez à partir de la page ou de fermer mon navigateur et de revenir quelques minutes plus tard, il me semble que si ces variables de Session ont été détruites comme il vient de sorties "Bienvenue", mais je suis toujours connecté dans ma session n'est pas détruit? J'ai mis la session à être détruits après un délai de 60 minutes dans mon web.config:
<sessionState regenerateExpiredSessionId="true" timeout="60" />
Modifier
Cela ne se produit que lorsque je vérifie mon "se Souvenir de Moi" lors de la connexion, comme je suppose que cela permet de maintenir un cookie côté client, donc, quand je ré-ouvre mon navigateur Im toujours connecté, mais un nouvel ID de session est créé comme je l'ai fait une Response.Write(Session.SessionID)
sur ma page Index et l'ID de l'avant, j'ai fermé mon navigateur est différente de celle où j'ai ré-ouvert. Si je ne vérifie pas mon "se Souvenir de Moi" alors que je suis forcé de vous connecter à nouveau sur la ré-ouverture de mon navigateur
Nop, son sur mon IIS interne
OriginalL'auteur CallumVass | 2012-04-12
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème avec mes variables de session. Si le souvenir de moi l'option a été sélectionnée lors de l'ouverture de session, il permettrait de contourner mon code pour définir la variable de session, j'avais besoin de la prochaine fois que l'utilisateur serait d'aller sur le site.
J'ai pu résoudre mon problème en le repeuplement de la variable de session si le IsAuthenticated était vrai.
OriginalL'auteur dklomparens
Au lieu d'ajouter le nom d'une variable de session, il suffit de changer le suivant
à
Ensuite, vous pouvez simplement utiliser l'Utilisateur.L'identité.Nom au lieu de l' @Session["Nom"].
OriginalL'auteur Remy
Le problème que vous avez est avec la ligne
C'est un cookie et durer plus longtemps que les sessions (en fonction de combien de temps vous définissez les formes de délai d'attente)
Si vous avez besoin d'afficher uniquement le nom d'utilisateur, vous pouvez utiliser et il suffit de retirer la session complètement
<forms loginUrl="~/Account/LogOn" timeout="60" /
j'ai aussi utiliser une variable de session dans un autre endroit sur le site et je rencontre le même problème, donc je me demandais quelles en sont les causesOriginalL'auteur Jason Jong
ce code devrait fonctionner correctement et vous devriez être en mesure de voir
"Welcome USERNAME"
, essayez de voir si les paramètres d'internet explorer commetools-->internet options-->General
ongletdelete my browsing history
est cochée ou non. (sur le même onglet, vous cliquez sur le bouton supprimer, vous verrez sa compensation, les témoins de façon à ce que pourrait être la question).Cookies valeurs seront conservées si vous fermez le navigateur, mais pas de session(inproc) variables.
OriginalL'auteur ParikshitSehgal
Peut-être d'abord de vérifier qu'une nouvelle session n'est pas commencé en quelque sorte. Placez un point d'arrêt dans le
Session_Start
dans leglobal.asax.cs
fichier:Il peut sembler idiot, mais il ya un couple de choses qui pourraient provoquer une nouvelle session. L'élimination de ceux qui vous rapprochera de la solution.
La fermeture de votre navigateur et de les ouvrir de nouveau va probablement provoquer une nouvelle session. Les changements à la structure de dossier dans votre site et les changements sur le web.config sera la cause d'une nouvelle session (pool d'applications seront recyclés).
Vous devez l'ajouter 🙂
À droite, au lieu de cela, j'ai fait une réponse.écrire(session.sessionId) sur ma page index et le 2 id de session sont différents.
Une fois que j'ai ré-ouvert mon navigateur, Si je continue à l'actualisation d'un nouvel id de session est généré à chaque fois? Mais Si je me connecte et ne pas fermer mon navigateur, puis continuez à frapper actualiser, j'ai le même id de session
OK, donc, en quelque sorte votre session est en cours de redémarrage. Les cookies de votre navigateur peut être à blâmer ici, car en principe, un cookie est utilisé pour stocker l'id de session.
OriginalL'auteur Eben Roux