2010-10-26 1 views

Répondre

1

Vous pouvez restreindre l'accès à certaines pages en utilisant l'élément <location>. Ainsi, par exemple pour restreindre l'accès au sous-dossier admin:

<system.web> 
    <!-- enable Forms authentication --> 
    <authentication mode="Forms"> 
     <forms 
      name="MyAuth" 
      loginUrl="login.aspx" 
      protection="All" 
      path="/" 
     /> 
    </authentication> 
</system.web> 

<!-- restrict access to the admin subfolder 
    and allow only authenticated users --> 
<location path="admin"> 
    <system.web> 
     <authorization> 
      <deny users="?" /> 
     </authorization> 
    </system.web> 
</location> 
5

Vous devez définir le mode d'authentification dans votre web.config

<authentication mode="Forms"> 
     <forms name="Authen" protection="All" timeout="60" loginUrl="login.aspx"/> 
    </authentication> 
<authorization> 
    <deny users="?"/> 
</authorization> 
+0

+1 pour me battre dessus. Vous pouvez améliorer votre réponse en ajoutant le lien à la propriété loginUrl –

+0

en cours, il indique sur l'autorisation. – kalls

0

Vous devez ajouter quelque chose de similaire dans le fichier web.config :

<authorization> 
    <allow users="user1, user2"/> 
    <deny users=”?”/> 
</authorization> 

Cela devrait résoudre le problème. Voir: http://support.microsoft.com/kb/815151

0

Outre la configuration d'authentification dans le fichier web.config , vous pouvez également utiliser le Global.asax Session_Start (...) méthode pour vérifier les utilisateurs nouvelle session, assurez-vous aussi réviser la cookie de session, si elle est nulle vous devez rediriger l'utilisateur vers la page de connexion:

public class Global:System.Web.HttpApplication 
{ 
    protected void Session_Start(object sender, EventArgs e) 
    { 
     if(Session.IsNewSession) 
     { 
      if (Request.Headers["Cookie"] != null) 
      { 
       if (Request.Headers["Cookie"].IndexOf("Web_App_Login_Cookie", StringComparison.OrdinalIgnoreCase) >= 0) 
       { 
        FormsAuthentication.SignOut(); 
        Context.User = null; 
        Response.Redirect("~/logOn.aspx"); 
       } 
      } 
     } 
    } 
} 

en outre, si vous stockez des informations de session utilisateur dans une classe, vous pouvez remplacer le OnInit (...) méthode dans certains classe de base pour s'assurer que l'utilisateur existe déjà dans certaines collections de sessions personnalisées, si n ot encore une fois, vous devriez rediriger vers la page de connexion.

public class SessionBasePage : System.Web.UI.Page 
{ 
    protected override void OnInit(EventArgs e) 
    { 
     base.OnInit(e); 
     if (HttpContext.Current != null && HttpContext.Current.Session != null)    
     { 
      UserSession = HttpContext.Current.GetUserSession(); 
      if (UserSession != null) 
      { 
       LoggedUserInfo = HttpContext.Current.GetLoggedUserInfo(); 
       HttpContext.Current.UpdateLoggedUserInfo(); 
      } 
      else { Response.Redirect("~/logOn.aspx", true); } 
     } 
    } 
} 
Questions connexes