12 Fév2016
Formulaire d’authentification avec compte Administrateur
Objectifs:
- Gérer l'état d'une application ASP.net
- Utiliser les variables d'état côté serveur
- Récupérer les données envoyées par la méthode GET
- Utiliser et détruire les variables de session
Énoncé:
Refaire l’exercice Formulaire d’authentification avec sessions mais cette fois-ci la page secret2.aspx ne sera accessible que par un administrateur.
Un administrateur est un utilisateur qui a le compte : Login=Admin ; Pass=123abc
Donc un utilisateur normal n’est pas autorisé à voir le contenu de la page secret2.aspx
La navigation entre les pages du site sera comme suit :
Remarque :
Si l’utilisateur est déjà authentifié et il a accédé à la page login.aspx, on ne doit pas lui afficher le formulaire d’authentification.
Ajouter dans les deux pages secrètes un bouton de déconnexion qui détruit la session de l'utilisateur et le redirige vers la page d'authentification.
Page login.aspx
Code ASP.NET
<form id="form1" runat="server"> <h3>Authentification</h3> <div> <asp:Label ID="lblErreur" runat="server" Style="font-weight: 700;"></asp:Label> <br /> <br /> </div> <div> <asp:Label ID="Label1" runat="server" Text="Login:"></asp:Label> <asp:TextBox ID="txtLogin" runat="server"></asp:TextBox> <br /> <br /> <asp:Label ID="Label2" runat="server" Text="Mot de passe: "></asp:Label> <asp:TextBox ID="txtPass" runat="server" TextMode="Password"></asp:TextBox> <br /> <br /> <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Se Connecter" /> </div> </form>
Code-Behind C#
protected void Page_Load(object sender, EventArgs e) { lblErreur.ForeColor = Color.Red; if (!IsPostBack) { if (Request.QueryString["erreur"] != null) { lblErreur.Text = "Vous devez vous connecter pour voir la page secrète!"; } if (Request.QueryString["logout"] != null) { lblErreur.Text = "Vous avez été déconnecté avec succès"; lblErreur.ForeColor = Color.Green; } if (Session["admin"] != null) { Response.Redirect("secret2.aspx"); } if (Session["login"] != null) { Response.Redirect("secret1.aspx"); } } } protected void Button1_Click(object sender, EventArgs e) { if (txtLogin.Text == "exelib.net" && txtPass.Text == "123456") { Session["login"] = txtLogin.Text; Response.Redirect("secret1.aspx"); } else if(txtLogin.Text == "Admin" && txtPass.Text == "123abc") { Session["admin"] = true; Session["login"] = txtLogin.Text; Response.Redirect("secret2.aspx"); } else { lblErreur.Text = "Login ou Mot de passe incorrect!"; } }
Page secret1.aspx
Code ASP.NET
<form id="form1" runat="server"> <h3>Page secrète 1</h3> <div> <p><asp:Label ID="lblSecret" runat="server" style="font-weight: 700"></asp:Label></p> <br /> <asp:Button ID="btnLogout" runat="server" Text="Déconnexion" OnClick="btnLogout_Click" /> </div> </form>
Code-Behind C#
protected void Page_Load(object sender, EventArgs e) { if (Session["login"] == null) { Response.Redirect("login.aspx?erreur=1"); } lblSecret.Text = "Bienvenue " + Session["login"]; lblSecret.Text += "<br>Vos informations confidentielles"; } protected void btnLogout_Click(object sender, EventArgs e) { Session.Clear(); Response.Redirect("login.aspx?logout=1"); }
Page secret2.aspx
Code ASP.NET
<form id="form1" runat="server"> <h3>Page secrète 2</h3> <div> <p><asp:Label ID="lblSecret" runat="server" style="font-weight: 700"></asp:Label></p> <br /> <asp:Button ID="btnLogout" runat="server" Text="Déconnexion" OnClick="btnLogout_Click" /> </div> </form>
Code-Behind C#
protected void Page_Load(object sender, EventArgs e) { if (Session["admin"] == null) { Response.Redirect("login.aspx?erreur=1"); } lblSecret.Text = "Bienvenue " + Session["login"] + " (Administrateur)"; lblSecret.Text += "<br>Vos informations confidentielles"; } protected void btnLogout_Click(object sender, EventArgs e) { Session.Clear(); Response.Redirect("login.aspx?logout=1"); }