2010-10-06 5 views
1

J'ai un <asp:Wizard> qui s'applique uniquement à un utilisateur déconnecté. Si l'utilisateur est actuellement connecté, il est redirigé vers une autre page. Dans l'une des étapes de l'assistant, dans le cadre de l'assistant, je demande des informations d'identification via le contrôle <asp:Login> et je me connecte à l'utilisateur. Cela présente un problème. "Lorsqu'un utilisateur utilise le contrôle de connexion pour se connecter à un site Web, toutes les données de l'état d'affichage et toutes les données de publication sont perdues.N'effectuez pas d'actions dans l'événement LoggedIn qui dépendent de l'état d'affichage. " À cause de cela, mon Assistant Wizard oublie l'étape à laquelle il se trouve après le processus de connexion. MSDN recommends: "Si vous incorporez le contrôle Login dans un objet WizardStep, définissez explicitement la propriété ActiveStepIndex dans un gestionnaire d'événements Page_Load si l'utilisateur est authentifié.Le contrôle Wizard ne passe pas automatiquement à l'objet WizardStep suivant dans ce scénario." Toutefois, étant donné que tout l'état d'affichage est perdu, la redirection des utilisateurs connectés intervient, ce qui renvoie l'utilisateur hors de la page. Quelle est la meilleure façon de déterminer, au chargement de la page, dans quels états se trouve l'utilisateur?Identifier la publication à partir d'un contrôle de connexion ASP.NET

  • Déjà connecté il y a longtemps; doit être redirigé.
  • Était juste connecté depuis l'intérieur de l'assistant; doit atteindre l'étape suivante de l'assistant.

Merci pour vos idées.

Répondre

1

« Un jeu étrange Le seul coup gagnant est de ne pas jouer. " Référence à War Games

Au lieu de jouer au jeu empêchant la redirection, une solution différente est possible. Puisque je contrôle tous les liens vers la page en question, lorsque l'utilisateur est connecté, je peux changer la destination (href) de ces liens vers la page post-redirection. Cela contourne le besoin de "jouer" sur la page elle-même, et permet à la page, si elle est touchée par un utilisateur connecté, de toujours passer à l'étape suivante de l'assistant approprié.

1

Vous pouvez définir une variable de session lorsque l'utilisateur se connecte à: Session("LoggedIn") = Now

Lors de la vérification de rediriger l'utilisateur, vérifier si LoggedIn était il y a au moins 3 minutes, puis rediriger. Étant donné que vous avez défini cette variable de session après la connexion, elle sera disponible (ou peut-être null si elle n'est pas connectée).

Vous pouvez créer un contrôle de connexion personnalisée, héritant de connexion, qui définit cette variable de session chaque fois qu'un utilisateur se connecte.

Public Class MyLogin : Inherits Login 
    Private Sub MyLogin_LoggedIn() Handles Me.LoggedIn 
     HttpContext.Current.Session("LoggedIn") = Now 
    End Sub 
End Class 
+0

La vérification de time-since-login semble être la voie la plus évidente, mais ce n'est pas tout à fait infaillible, donc je préfère une autre solution. Un utilisateur peut se connecter, puis visiter immédiatement cette page, donc la valeur devrait être plus de 3 secondes (pour attraper les utilisateurs rapides), et même alors, une page à chargement lent pourrait manquer la fenêtre, causant la redirection non désirée. – ChessWhiz

+0

Ensuite, ajoutez un événement au contrôle de connexion qui est autorisé et laissez seulement ce login définir un objet de session pour empêcher la redirection – Willem

+0

Cela fonctionnerait, mais c'est un peu plus complexe que la solution que j'ai posté. Merci pour l'idée, cependant! – ChessWhiz

Questions connexes