2009-03-13 8 views
2

J'ai comme site Web ASP.Net 2.0 avec SQL Server comme base de données et C# 2005 comme langage de programmation. Le site est presque complet et tous les liens fonctionnent bien. Mais je veux empêcher les utilisateurs normaux d'ouvrir quelques pages. Lorsqu'un utilisateur clique sur ces liens spécifiques, une autre page s'ouvre qui contient un contrôle de connexion ASP. L'utilisateur doit fournir un ID utilisateur et un mot de passe valides pour afficher les liens pointant vers les pages restrictives. Mais étant un débutant, je ne sais pas comment tirer parti de la pleine puissance du contrôle de connexion ASP. Parce que, si un utilisateur arrive à connaître l'URL exacte des pages restreintes, il/elle peut contourner le contrôle de connexion et accéder directement à ces pages en tapant l'URL dans la barre d'adresse. Je veux empêcher cela. Si l'utilisateur tape l'URL directement dans la barre d'adresse, je veux que la page vérifie elle-même si l'utilisateur a été validé via le contrôle Login et affiche la page ou pointe l'utilisateur vers la page de connexion.Empêcher les visiteurs d'ouvrir certaines pages

Comment implémenter cette fonctionnalité?

Merci.

Lalit Kumar Barik

Répondre

0

Vous devez vérifier de l'utilisateur connecté état à chaque événement Page_Load() sur les pages qui doivent contrôler les autorisations, ou simplement mettre le code d'authentification dans un CS fichier qui sera inclus dans tous les autres fichiers. En fonction de l'architecture d'authentification que vous choisissez (utilisez simplement la variable de session ou créez un identifiant de session avec des cookies), vous devez adapter votre code en conséquence.

La méthode la plus simple consiste à gérer les connexions via l'objet de session. Lorsque l'utilisateur se connecte correctement avec les informations d'identification appropriées, vous pouvez définir Session["logged_in"] = true. Et sur chaque événement Page_Load() des pages que vous souhaitez protéger, vous devez effectuer la vérification suivante.

Ajoutez ce code au début de votre fonction Page_Load():

if (Session["logged_in"] != null && (bool)Session["logged_in"] == true){ 
    Response.Write("I'm logged in!"); 
    }else{ 
    Response.Write("I'm not logged in."); 
    } 

S'il vous plaît garder à l'esprit que c'est correct pour les applications intranet simples, mais si vous voulez entrer dans les architectures de connexion plus sécurisée, lire plus sur le sujet, comme relooker uniquement sur les variables de session n'est pas sûr car les sessions peuvent être détournées.

+0

Lors de l'exécution de la ligne if (SESSION ['logged_in']! = null && SESSION ['logged_in'] == true) Je reçois l'erreur suivante: L'opérateur '==' ne peut pas être appliqué aux opérandes de type 'objet' et 'bool' Des solutions? Lalit Kumar Barik – LalitBarik

+0

Probablement une fonte doit être faite. Remplacez le code par: if ((bool) SESSION ['connect_in']! = Null && (bool) SESSION ['logged_in'] == true) et dites-moi comment ça se passe. Je vais tester cela demain officiellement. Merci. –

+0

if (SESSION ['connect_in']! = Null && (bool) SESSION ['logged_in'] == true) - Ne vous embêtez pas à lancer la vérification null. –

8

Vous aurez envie de jeter un oeil à la location Secton de la configuration Web.

Dans cette section, vous pouvez définir jusqu'au niveau de la page des droits d'accès, il ne serait pas question si les utilisateurs connaissaient l'URL des pages sécurisées, ASP.NET ne les faire entrer.

donc, vous ajouter quelque chose comme:

<location path="SecuredPage.aspx"> 
    <system.web> 
    <authorization> 
     <deny users="?"/> 
    </authorization> 
    </system.web> 
</location> 

Le « refuser aux utilisateurs = » « » bit dit « refuser tous les utilisateurs anonymes ».

Vous pouvez également le configurer pour n'autoriser que certains rôles, si vous les utilisez.

Plus d'informations sur la section d'autorisation peut être trouvée ici:

authorization Element

+0

Zhaph, est-ce que cette solution nomme les noms des utilisateurs? Pouvez-vous spécifier votre propre liste d'utilisateurs via une combinaison nom d'utilisateur/mot de passe? –

+0

Pour être honnête, cette solution suppose que vous utilisez le système d'adhésion ASP.NET - soit via le fournisseur SQL intégré, ou votre propre fournisseur: http://bit.ly/w5yX. Cependant, oui, vous pouvez fournir des combinaisons nom d'utilisateur/mot de passe dans l'élément credentials/users dans le fichier web.config: http://bit.ly/11sRQ3 –

+0

Cela vous permettra également d'utiliser des choses comme if (Request.IsAuthenticated) pour vérifier si l'utilisateur est connecté, plutôt que de s'appuyer sur des variables de session, etc.: http://bit.ly/yJY9M –

2

Ceci est la nourriture pour les services d'adhésion ASP.Net. Jetez un oeil à this article et aussi the great series sur 4GuysFromRolla. L'appartenance vous permet de stocker les informations utilisateur/mot de passe qui sont utilisées, entre autres, par le contrôle Login. Couplé avec la configuration d'autorisation, vous serez en mesure de restreindre directement l'accès à des pages spécifiques à des utilisateurs ou des rôles spécifiques.

0

Je voudrais créer une table de rôles pour les utilisateurs. Tous ceux qui se connectent obtiennent le rôle «normal». Les utilisations spéciales que vous désignez en fonction de leurs informations d'identification se voient attribuer des rôles pour accéder à une page ou à une section de votre site Web. Certains utilisateurs (comme vous-même) obtiendraient un rôle d'administrateur qui leur permettrait automatiquement d'accéder à tout.

Déclenche une fonction appelée CheckIsInRoles ('Admin', 'Normal', 'WhateverRoleYouChoose') qui renvoie un booléen. Si vrai, chargez la page; sinon, ne le fais pas.

Encore mieux ne pas afficher un lien si ce n'est pas dans le bon rôle.

Cela a l'avantage supplémentaire que tout le monde se connecte une seule fois et accède à toutes les pages dont il a besoin sans devoir se connecter à chaque fois.

+0

Merci pour votre explication sur le thème des rôles. Je suis sûr d'utiliser les connaissances dans mes futurs sites Web. Malheureusement, sur le site actuel, les utilisateurs normaux n'ont pas besoin de se connecter. La connexion est requise pour quelques personnes seulement pour accéder au couple de pages restreintes. Je n'avais besoin que d'une simple restriction. – LalitBarik

Questions connexes