Accès admin sans .htaccess

Fermé
unker - 10 janv. 2013 à 14:42
 unker - 11 janv. 2013 à 00:09
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.


A voir également:

22 réponses

Nhay Messages postés 838 Date d'inscription vendredi 2 novembre 2012 Statut Membre Dernière intervention 17 décembre 2015 126
10 janv. 2013 à 15:30
Une fois le login réussit, tu enregistre une session avec le nom de ton choix.
Sur chaque page, il ne te restera plus qu'à vérifier si la session est là ou non, si elle n'est pas là, un header("location:protection.php"); et voilà.
0
Merci pour ta réponse!

Mais comment fais-t-on pour enregistrer une session lors du login?

J'ai entré une table d'utilisateur dans phpmyadmin... mais ensuite ?

Merci
0
Nhay Messages postés 838 Date d'inscription vendredi 2 novembre 2012 Statut Membre Dernière intervention 17 décembre 2015 126
10 janv. 2013 à 15:45
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");
0
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 ...!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Nhay Messages postés 838 Date d'inscription vendredi 2 novembre 2012 Statut Membre Dernière intervention 17 décembre 2015 126
10 janv. 2013 à 16:01
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.
0
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>
0
Nhay Messages postés 838 Date d'inscription vendredi 2 novembre 2012 Statut Membre Dernière intervention 17 décembre 2015 126
10 janv. 2013 à 16:14
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">
0
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.
0
aiglenoirdu29 Messages postés 10177 Date d'inscription mercredi 24 décembre 2008 Statut Contributeur Dernière intervention 5 mai 2020 2 344
Modifié par aiglenoirdu29 le 10/01/2013 à 16:47
Bonjour,

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.
0
Nhay Messages postés 838 Date d'inscription vendredi 2 novembre 2012 Statut Membre Dernière intervention 17 décembre 2015 126
10 janv. 2013 à 16:30
Exact, rajoute un ; après session_start() (-> session_start();)
0
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 ! ) .
0
Nhay Messages postés 838 Date d'inscription vendredi 2 novembre 2012 Statut Membre Dernière intervention 17 décembre 2015 126
10 janv. 2013 à 16:41
Tu peut renvoyer le code des deux pages corrigés du coup ?
0
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>
0
Nhay Messages postés 838 Date d'inscription vendredi 2 novembre 2012 Statut Membre Dernière intervention 17 décembre 2015 126
Modifié par Nhay le 10/01/2013 à 16:49
Tu as laisser le deuxième header/session_start
<div id="moncadre">  
<?php session_start()?>  

<?php if(!$_SESSION["admin"])header("location:protection.php");?> 
0
Effectivement,

J'ai supprimé ça mais ça ne change rien malheureusement !
0
Nhay Messages postés 838 Date d'inscription vendredi 2 novembre 2012 Statut Membre Dernière intervention 17 décembre 2015 126
10 janv. 2013 à 16:57
essaye de faire un $_SESSION["truc"]=1; echo $_SESSION["truc"]; histoire de voir si tes session fonctionne.
0
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.
0
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
0
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
0
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;
}
0
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>
0