2009-08-29 6 views
2

Lorsque vous avez configuré l'authentification des formulaires pour rediriger vers login.aspx lors de l'accès à une page protégée, quel est un bon moyen de détecter dans login.aspx si l'utilisateur a été envoyé parce qu'il n'a pas connecté sur encore, ou parce que leur formulaire formulaire d'autorisation est expiré? J'aimerais afficher un message "Vous avez dépassé le délai imparti".Détection du délai d'authentification des formulaires dans la page de connexion

(je ne mentionne pas la session de mots dans cette question, parce que ASP.NET les traite de façon distincte, mais s'il y a une bonne solution qui implique la session, je suis toutes les oreilles)

J'ai Cela a été résolu par le passé en ayant un autre cookie "hasloggedin" défini lorsqu'un utilisateur se connecte puis vérifie s'il existe pour déterminer s'il s'agit d'un délai d'expiration et affiche ensuite un message approprié. Mais, cela doit être un problème commun?

+0

Votre méthode cookie semble être une bonne façon de le faire. Si vous utilisez déjà des variables de session (en fonction de leur valeur relative de délai d'expiration), vous pouvez vérifier 'Page.Session.IsNewSession' pour voir si la session a été créée avec la requête en cours. – JustinStolle

Répondre

2

L'authentification par formulaire ajoute automatiquement un paramètre d'URL 'ReturnURL', indiquant quelle page (le cas échéant) a déclenché la redirection vers la page de connexion. La plupart des sites Web ont un 'Default.aspx' ou 'index.html' etc. comme page par défaut. Vous pouvez vérifier le ReturnURL pour voir s'il contient la page par défaut, ou une autre page dans votre application.

Exemple:

string refererURL; 
if (page.Request.QueryString["ReturnURL"] != null) 
{ 
    refererURL = page.Request.QueryString["ReturnURL"].ToString(); 
} 

//Check to see if user was redirected because of Timeout or initial login 
//Where "Default.aspx" is the default page for your application 
if (refererURL != "" && refererURL != (ResolveUrl("~") + "Default.aspx")) 
{ 
    //Show HTML etc showing session timeout message 
} 
else // User redirected here to to initial login 
{ 
    //Show HTML showing initial login HTML message etc 
} 
+0

Bonne idée. Cela fonctionne très bien pour mon application actuelle, mais pour d'autres que j'ai fait, il y a eu des liens sur des pages anonymes vers des pages qui nécessitent une authentification, et donc le returnurl n'est pas suffisant pour faire la différence entre un timeout ou un premier essai. âge protégé. Mais, je pense que cela devrait fonctionner dans de nombreux cas, et en le combinant avec la valeur réelle de returnurl devrait le rendre encore mieux. Merci pour la réponse. – RyanW

Questions connexes