Accès admin sans .htaccess
Bonjour,
Alors voici mon soucis,
J'ai essayé de sécuriser mon espace administrateur du site que je suis entrain de faire via .htaccess mais cela n'a pas fonctionné, lorsque j'ouvre les pages du dossier admin, aucuns login ne m'es demandé...
Alors, j'ai opté pour une sécurisation en Php, ainsi j'ai adapté un script de login tout simple, de fait lorsque je tape le bon login, ma page index.php de l'espace admin s'ouvre. Cependant, cela ne marche seulement lorsque je passe par ma page protection.php, et si j'ouvre l'adresse des autres pages de mon dossier admin ( y compris index.php), on ne passe pas par la page protection.php... logique me diriez vous, cependant, j'aimerai savoir comment on fait pour que l'on ne puisse pas accéder aux autres pages sans passer tout d'abord par protection.php.
Je suis débutant et j'ai un peu de mal à comprendre tout,
Merci, cordialement.
Alors voici mon soucis,
J'ai essayé de sécuriser mon espace administrateur du site que je suis entrain de faire via .htaccess mais cela n'a pas fonctionné, lorsque j'ouvre les pages du dossier admin, aucuns login ne m'es demandé...
Alors, j'ai opté pour une sécurisation en Php, ainsi j'ai adapté un script de login tout simple, de fait lorsque je tape le bon login, ma page index.php de l'espace admin s'ouvre. Cependant, cela ne marche seulement lorsque je passe par ma page protection.php, et si j'ouvre l'adresse des autres pages de mon dossier admin ( y compris index.php), on ne passe pas par la page protection.php... logique me diriez vous, cependant, j'aimerai savoir comment on fait pour que l'on ne puisse pas accéder aux autres pages sans passer tout d'abord par protection.php.
Je suis débutant et j'ai un peu de mal à comprendre tout,
Merci, cordialement.
22 réponses
-
Même en refermant totalement le navigateur cela ne fonctionnait pas...
Du coup je me suis dis que j'allais laisser tomber et je test l'autre technique, qui me semble d'ailleurs plus fiable, car je peux indiquer une valeur de déconnection, ce qui est tout de même très important. En utilisant les bases de données il saura aussi plus facile de changer les mots de passes et etc... d'en inclure plusieurs.
Cela semble fonctionner correctement. J'ignore comment Dreamweaver intègre réellement tout ça mais pour ceux que ça intéresse, je peux publier le script ( dreamweaver l'automatise ) . En réalité, je n'arrivai pas à la faire, car je n'avais tout bonnement pas relier la base de donnée.
Merci pour votre coup de main en tout cas!!! -
Très étrange en effet.
Car si avant tu retournais sur le formulaire de login, c'est justement parce que le contrôle au début de index.php marchait bien.
Mais c'est vrai qu'il manque un exit :if(!$_SESSION["admin"]) { header("location:protection.php"); exit; }
Quand tu dis que ça ne dirige pas vers protection.php, est-ce bien après avoir refermé complètement ton navigateur, et même toutes les instances du navigateur ? Il ne suffit pas de refermer la page de ton site, il faut bien tout refermer. -
Merci pour vos conseils. Effectivement, maintenant, lorsque je suis sur protection.php, je suis redirigé sur index.php lorsque l'indentification est bonne.
Cependant, lorsque je suis sur index.php ( sans passer par protection.php) , on ne me dirige pas sur protection.php pour l'identification maintenant...
Je remet le code pour que vous voyez, je n'ai pourtant rien touché ... étrange. Merci pour votre grande aide, sinon si c'est trop prise de tête je me pencherai sur l'autre solution avec vérifications de la base de donnée plutôt.
Le code de index.php :
<?php session_start();
if(!$_SESSION["admin"])header("location:protection.php");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/ DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr-fr">
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
<link href="../style.css" rel="stylesheet" type="text/css"/>
<title>Administration</title>
</head>
<body>
<div id="moncadre">
<?php include('menu.php');?>
<div class="cadrecentrale">
<h1>Administration</h1>
<?php
include('.../protection.php');
// on se connecte à la base de données
include('../connexion_bd.php');
mysql_connect("$nom_du_serveur","$nom_utilisateur","$passe");
mysql_select_db("$nom_de_la_base") or die('Impossible de sélectionner une base de donnée. Assurez vous d\'avoir correctement remplit les données du fichier connexion_bd.php.');
//On selectionne les données
$result = mysql_query("SELECT id,nom_categorie FROM CATEGORIES ORDER BY id ASC");
//On voit si il y a quelque chose. Si il n'y a rien, on affiche un message
if(mysql_num_rows($result) == 0)
{
echo '<div class="cadre"><p>Aucune catégorie pour le moment! <b>>><a title="Ajouter une catégorie" href="ajouter-categorie.php">Ajouter une catégorie</a></b></p> </div>';
}
//Si il y a quelque chose, on affiche nos données
else {
echo '<table style="width: 100%;" cellpadding="2" cellspacing="2"> <tbody> <tr> <td class="hauttd">Catégories</td> <td class="hauttd">Modifier</td> <td class="hauttd">Supprimer</td> </tr>';
while($affiche = mysql_fetch_array($result))
{
//On calcul le nombre d'article dans chaque catégorie
$calcul=$affiche['id'];
$result1 = mysql_query("SELECT id_categorie FROM CONTENU WHERE id_categorie=$calcul");
$total = mysql_num_rows($result1);
//Fin du calcul
echo '<tr><td><a href="voir-categorie.php?id='.$affiche['id'].'">'.$affiche['nom_categorie'].'</a><span style="float:right;">('.$total.')</span></td> <td><a href="modifier-categorie.php?id='.$affiche['id'].'"><img src="images/modifier.png" alt="Modifier"/></a></td> <td><a href="supprimer-categorie.php?id='.$affiche['id'].'"><img src="images/supprimer. png" alt="Supprimer"/></a></td></tr>';
}
echo '</tbody></table>';
//On ferme else
}
?>
</div>
<?php include('../footer.php');?>
</div>
</body>
</html> -
remplace
//On démarre la session ici $_SESSION["admin"]=1; ?> Affichage de la page caché! <? }
par//On démarre la session ici $_SESSION["admin"]=1; header ("Location: index.php"); exit; } -
Rah...! C'est bien vrai...!
Il faut donc que j'indique à la place de "affichage de la page cachée!" le liens vers index.php ...? Mais comment ?
Désolé je suis vraiment perdu...! Merci à tous -
Bonjour
Normal que tu retournes sur le formulaire de login à tous les coups...
ton formulaire de login commence par<center><form action="index.php" method="post">
C'est donc à la page index que le formulaire est envoyé. Or, tu l'analyses dans la page protection.php !
Tu devrais donc mettre<center><form action="protection.php" method="post">et, en cas de succès, rediriger vers index.php -
Ok j'ai mis dans index.php mais j'imagine que ce n'est pas là qu'il faut y mettre? Car ça ne fais rien.
-
essaye de faire un $_SESSION["truc"]=1; echo $_SESSION["truc"]; histoire de voir si tes session fonctionne.
-
Effectivement,
J'ai supprimé ça mais ça ne change rien malheureusement ! -
Tu as laisser le deuxième header/session_start
<div id="moncadre"> <?php session_start()?> <?php if(!$_SESSION["admin"])header("location:protection.php");?> -
Oui, alors voici :
protection.php :
<?
session_start();
$utilisateur = "admin"; // Votre nom d'utilisateur
$mot_de_passe = "admin"; // Votre mot de passe
if (isset($_POST['login']) && isset($_POST['pass'])){
}
else
{
$_POST['login'] = "";
$_POST['pass'] = "";
}
if ($_POST['login'] == "$utilisateur" && ($_POST['pass'] == "$mot_de_passe")) // Si le nom d'utilisateur et le mot de passe sont correct
{
//On démarre la session ici
$_SESSION["admin"]=1;
?>
Affichage de la page caché!
<?
}
else
{
if ($_POST['login'] != "" || ($_POST['pass'] != "")) // Si le nom d'utilisateur ou le mot de passe est incorrect
{
?>
<center><font color="red">Mauvais mot de passe ou mauvais nom d'utilisateur!</font></center>
<?
}
?>
<center><form action="index.php" method="post">
Utilisateur:<br><input type="text" name="login" /><br>
Mot de passe:<br><input type="password" name="pass" /><br>
<input type="submit" value="Valider" />
</form></center>
<?
}
?>
index.php:
<?php session_start();
if(!$_SESSION["admin"])header("location:protection.php");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/ DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr-fr">
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
<link href="../style.css" rel="stylesheet" type="text/css"/>
<title>Administration</title>
</head>
<body>
<div id="moncadre">
<?php session_start()?>
<?php if(!$_SESSION["admin"])header("location:protection.php");?>
<?php include('menu.php');?>
<div class="cadrecentrale">
<h1>Administration</h1>
<?php
include('.../protection.php');
// on se connecte à la base de données
include('../connexion_bd.php');
mysql_connect("$nom_du_serveur","$nom_utilisateur","$passe");
mysql_select_db("$nom_de_la_base") or die('Impossible de sélectionner une base de donnée. Assurez vous d\'avoir correctement remplit les données du fichier connexion_bd.php.');
//On selectionne les données
$result = mysql_query("SELECT id,nom_categorie FROM CATEGORIES ORDER BY id ASC");
//On voit si il y a quelque chose. Si il n'y a rien, on affiche un message
if(mysql_num_rows($result) == 0)
{
echo '<div class="cadre"><p>Aucune catégorie pour le moment! <b>>><a title="Ajouter une catégorie" href="ajouter-categorie.php">Ajouter une catégorie</a></b></p> </div>';
}
//Si il y a quelque chose, on affiche nos données
else {
echo '<table style="width: 100%;" cellpadding="2" cellspacing="2"> <tbody> <tr> <td class="hauttd">Catégories</td> <td class="hauttd">Modifier</td> <td class="hauttd">Supprimer</td> </tr>';
while($affiche = mysql_fetch_array($result))
{
//On calcul le nombre d'article dans chaque catégorie
$calcul=$affiche['id'];
$result1 = mysql_query("SELECT id_categorie FROM CONTENU WHERE id_categorie=$calcul");
$total = mysql_num_rows($result1);
//Fin du calcul
echo '<tr><td><a href="voir-categorie.php?id='.$affiche['id'].'">'.$affiche['nom_categorie'].'</a><span style="float:right;">('.$total.')</span></td> <td><a href="modifier-categorie.php?id='.$affiche['id'].'"><img src="images/modifier.png" alt="Modifier"/></a></td> <td><a href="supprimer-categorie.php?id='.$affiche['id'].'"><img src="images/supprimer. png" alt="Supprimer"/></a></td></tr>';
}
echo '</tbody></table>';
//On ferme else
}
?>
</div>
<?php include('../footer.php');?>
</div>
</body>
</html> -
Tu peut renvoyer le code des deux pages corrigés du coup ?
-
Effectivement, l'erreur est enlevée, mais...la page de login s'affiche bien mais ( avec le bon login évidemment ), la page ne s'affiche pas et ça retourne sur la page de login automatiquement. Pourtant cela fonctionnais avant la modification . ( un bien pour un mal on pourrait dire ! ) .
-
Exact, rajoute un ; après session_start() (-> session_start();)
-
Merci pour ton aide!
Cependant, lorsque je recopie le php dans la page index.php, dreamweaver m'indique une erreur à la ligne 2 et je ne vois pas pourquoi :/...Du coup la page ne s'affiche pas.-
ContributeurBonjour,
Attention avec dreamweaver et les éditeur wysiwyg en général hein...
On aime bien le coté 'facile' mais ça fait du code bien dégueulasse si on sait pas s'en servir correctement. Il est même plutôt recommandé de ne pas les utiliser.
Et là tu n'as pas l'air de maitriser les sessions en php donc ça m'étonnerais que tu saches te servir proprement de dreamweaver si?
Il est préférable d'utiliser un éditeur en mode texte, exemple Notepad++ sous windows.
-
-
Correction :
(Attention, j'ai pas tout recopier)
Ton login.
<?
session_start();
$utilisateur = "admin"; // Votre nom d'utilisateur
$mot_de_passe = "admin"; // Votre mot de passe
if (isset($_POST['login']) && isset($_POST['pass'])){
}
else
{
$_POST['login'] = "";
$_POST['pass'] = "";
}
if ($_POST['login'] == "$utilisateur" && ($_POST['pass'] == "$mot_de_passe")) // Si le nom d'utilisateur et le mot de passe sont correct
{
//On démarre la session ici
$_SESSION["admin"]=1;
?>
Affichage de la page caché!
<?
}
else
{
if ($_POST['login'] != "" || ($_POST['pass'] != "")) // Si le nom d'utilisateur ou le mot de passe est incorrect
{
?>
<center><font color="red">Mauvais mot de passe ou mauvais nom d'utilisateur!</font></center>
<?
}
?>
<center><form action="index.php" method="post">
Utilisateur:<br><input type="text" name="login" /><br>
Mot de passe:<br><input type="password" name="pass" /><br>
<input type="submit" value="Valider" />
</form></center>
<?
}
?>
Ta page body :
(Autant mettre la vérif' tout en haut, ça ne chargera pas des trucs inutilement.)
<?php session_start()
if(!$_SESSION["admin"])header("location:protection.php");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/ DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr-fr"> -
Oui c'est sur.
J'ai testé ton code mais cela ne fonctionne pas, peut tu regarder simplement le début et fin pour me dire ce qui cloche ...?
voici le php de la page de login :
<?
session_start();
$utilisateur = "admin"; // Votre nom d'utilisateur
$mot_de_passe = "admin"; // Votre mot de passe
if (isset($_POST['login']) && isset($_POST['pass']))
{
}
else
{
$_POST['login'] = "";
$_POST['pass'] = "";
}
if ($_POST['login'] == "$utilisateur" && ($_POST['pass'] == "$mot_de_passe")) // Si le nom d'utilisateur et le mot de passe sont correct
{
?>
Affichage de la page caché!
<?
}
else
{
if ($_POST['login'] != "" || ($_POST['pass'] != "")) // Si le nom d'utilisateur ou le mot de passe est incorrect
{$_SESSION["admin"]=1
?>
<center><font color="red">Mauvais mot de passe ou mauvais nom d'utilisateur!</font></center>
<?
}
?>
<center><form action="index.php" method="post">
Utilisateur:<br><input type="text" name="login" /><br>
Mot de passe:<br><input type="password" name="pass" /><br>
<input type="submit" value="Valider" />
</form></center>
<?
}
?>
et le php de ma page index.php par exemple :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/ DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr-fr">
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
<link href="../style.css" rel="stylesheet" type="text/css"/>
<title>Administration</title>
</head>
<body>
<div id="moncadre">
<?php session_start()?>
<?php if(!$_SESSION["admin"])header("location:protection.php");?>
<?php include('menu.php');?>
<div class="cadrecentrale">
<h1>Administration</h1>
<?php
include('.../protection.php');
// on se connecte à la base de données
include('../connexion_bd.php');
mysql_connect("$nom_du_serveur","$nom_utilisateur","$passe");
mysql_select_db("$nom_de_la_base") or die('Impossible de sélectionner une base de donnée. Assurez vous d\'avoir correctement remplit les données du fichier connexion_bd.php.');
//On selectionne les données
$result = mysql_query("SELECT id,nom_categorie FROM CATEGORIES ORDER BY id ASC");
//On voit si il y a quelque chose. Si il n'y a rien, on affiche un message
if(mysql_num_rows($result) == 0)
{
echo '<div class="cadre"><p>Aucune catégorie pour le moment! <b>>><a title="Ajouter une catégorie" href="ajouter-categorie.php">Ajouter une catégorie</a></b></p> </div>';
}
//Si il y a quelque chose, on affiche nos données
else {
echo '<table style="width: 100%;" cellpadding="2" cellspacing="2"> <tbody> <tr> <td class="hauttd">Catégories</td> <td class="hauttd">Modifier</td> <td class="hauttd">Supprimer</td> </tr>';
while($affiche = mysql_fetch_array($result))
{
//On calcul le nombre d'article dans chaque catégorie
$calcul=$affiche['id'];
$result1 = mysql_query("SELECT id_categorie FROM CONTENU WHERE id_categorie=$calcul");
$total = mysql_num_rows($result1);
//Fin du calcul
echo '<tr><td><a href="voir-categorie.php?id='.$affiche['id'].'">'.$affiche['nom_categorie'].'</a><span style="float:right;">('.$total.')</span></td> <td><a href="modifier-categorie.php?id='.$affiche['id'].'"><img src="images/modifier.png" alt="Modifier"/></a></td> <td><a href="supprimer-categorie.php?id='.$affiche['id'].'"><img src="images/supprimer. png" alt="Supprimer"/></a></td></tr>';
}
echo '</tbody></table>';
//On ferme else
}
?>
</div>
<?php include('../footer.php');?>
</div>
</body>
</html> -
Je n'ai pas dreamweaver, donc dur de t'aider, mais si il teste la connexion à chaque page, c'est des requêtes vers ta base pour rien.
-
Ok merci je vais tester!
Entre temps, j'ai trouvé une soluc direct sur dreamweaver assez simple qui consiste à ajouter un comportement "connecter l'utilisateur" a 2 formulaire 'log" et "pass".
Le comportement devrait trouver automatiquement la correspondance dans la table des utilisateurs, cependant il ne trouve pas mon serveur... alors que tout est bien configuré et le serveur de test marche très bien etc... un vrai casse tête!
Je vais essayer ta solution, si des fois tu as une raison pour mon autre problème ...! -
Pour la session c'est simple, tu commence par mettre
session_start(); au tout début.
Si le login à réussit tu fais simplement $_SESSION["login"]=1;
Sur les autres pages, tu remets bien le session_start, et tu test :
if(!$_SESSION["login"])header("location:protection.php");
- 1
- 2
Suivant