Espace membres

Bonjour Anonyme

Inscription

Email :
Mot de passe :

Mot de passe oublié ?

Nos scripts

MySpeach

MySpeach est un chat php sans base de donnée, rapide, léger et facile à prendre en main. DEMO

MyPHPUpload

MyPHPUpload est un script d'upload sécurisé écrit en PHP. DEMO

GrapAgenda

Agenda PHP et MySQL avec comptes utilisateurs et administration. DEMO

Livre PHP

création de site

Protéger une page avec les sessions php

Cours / tutoriel écrit le 17-06-2010 par sky
Comment protéger une page avec des sessions PHP

Depuis la version 4.1.0 de PHP, on utilise la variable $_SESSION pour récupérer ou gérer tout les variables de session.
On s'en sert très souvent pour faire un accès sécurisé.
Voici un rapide exemple de comment rendre une page accessible que via login et mot de passe.

Tout d'abord, le formulaire html ou l'on va entrer le login et mot de passe (form.html)
<p>Formulaire de connexion</p>
<form action="./identification.php" method="post">
    Login : <input type="text" name="login" value="" /><br />
    Login : <input type="password" name="mdp" value="" /><br />
    <input type="submit" value="envoyer">
</form>


Puis, une page config.php dans lequel on va stocker le login et mot de passe de l'administrateur :
<?php
$salt = 'BwGk15l8WX'; // $salt permet d'avoir un mot de passe plus sécurisé
$_admin_pass = md5('motdepasse'.$salt); // on crypt pour pouvoir comparer - plus sécurisé
$_admin_login = 'login';
?>


Ensuite, la page qui va vous identifier : (identification.php)
<?php
session_start(); // on initialise les sessions PHP

// on inclu la page de config
include("./config.php");

if($_POST && !empty($_POST['login']) && !empty($_POST['mdp']))
{
    // on crypt le mot de passe envoyer par le formulaire
    $password_md5 = md5($_POST['mdp'].$salt);

    if(($_admin_login == $_POST['login']) && ($password_md5 == $_admin_pass))
    {
        $_SESSION['_login'] = $_admin_login;
        $_SESSION['_pass'] = $password_md5;

        echo '<p style="color:green">Connexion réussi! </p>';
        echo '<p><a href="./index.php">Page admin</a></p>';
    }
    else
    {
        echo '<p style="color:red">Mauvais login ou mot de passe</p>';
        include("./form.html");
        exit();
    }
}
?>


Ensuite, il faut un code php qui va vérifié, sur chaque page que vous voulez protéger, que nous sommes bien connecté : (verif.php)
<?php
session_start();

// on inclu la page de config
include("./config.php");

if(!isset($_SESSION['_login']) || !isset($_SESSION['_pass']))
{
    // si on ne détecte aucune sessions, c'est que cette personne n'est pas connecté
    // on affiche le formulaire de connexion
    echo '<p><b style="color:red">espace sécurisé</b><br />Connecté vous pour accéder à cette page</p>';
    include("./form.html");
    exit();
}
else
{
    // les sessions existe ... reste à savoir si les informations sont correct ou non
    if(($_admin_login != $_SESSION['_login']) || ($_SESSION['_pass'] != $_admin_pass))
    {
        echo '<p><b style="color:red">Votre connexion ne semble pas valide</b></p>';
        include("form.html");
        exit();
    }
}
?>


Pour finir, il faut une 1er page qui test si on est connecté ou non et qui affichera la page (ou une liste de page protégé). Appelons cette 1er page index.php :
<?php
include('./verif.php'); // si la vérification est ok : on aura accès au reste de la page.

echo '
<p>
    <b>Bonjour</b><br />
    Vous est connecté en tant que <b>'
.$_SESSION['_login'].'</b>
</p>'
;
?>


Ceci est vraiment un exemple assez basique de comment créer un petit espace protéger par login et mot de passe unique. Le système d'identification peut et devrai être améliorer dans un univers en production. On est dans un cadre d'apprentissage.

Si vous avez du mal à le mettre en place, le forum est ouverte.

Pour aller plus loin : Classe de connexion sécurisé PHP

Commentaires

mounir le 02-07-2012

s.v.p je veux sisir un login et password puis je vais acces au compte special contient tout les msg recu a partir l'admin au autre client s.v.p envoyer les info vers ma boite

LordKaizer le 18-09-2011

Ah oui aufaite merci pour le tuto ça risque d'en aider plus d'un

LordKaizer le 18-09-2011

Je suis d'accord avec toi c'est vraie qu'on ne peut peut appeler ça une connéxion "sécurisé". je suis aussi d'accord sur le fait que ce n'est qu'un cache, Mais quand j'ai vu ton code je me suis dit: Aller hop, il n'utilise pas de BDD. 5min à perdre je leur montre un code basic ;)" D'ailleur j'ai bien préciser qu'il était basic après si j'aurais pas du le poster par soucis de sécurité je suis vraiment désolé.

Cordialement LordKaizer

sky le 15-09-2011

LordKaizer : La sécurité par "l’obscurité" est plus ou moins le mal absolue. ta solution est tout simplement pas une solution de connexion sécurisé. C'est un cache misère.

LordKaizer le 07-09-2011

Il y a beacoup plus simple que ça ! Regardez:

index.php:
<?php
$console="$_GET["console"]";

if ($console == 1)
{
echo "<strong><span style="color:red;">Mauvaise combinaison pseudo/mdp</span><strong><br />";
}
elseif ($console == 2)
{
echo "Vous devez entrer du texte !";
}
?>
<center>
Connéxion:<br />
<form method="post" action="MyPage.php">
<label>Pseudo:</label><input type="text" name="pseudo" value="Votre pseudo" /><br />
<label>Mdp:</label><input type="password" name="mdp" value="Votre Mot de pass" /><br />
<input type="submit" value="Valider" />
&nbsp;&nbsp;
<input type="reset" value="Reset" />
</form>
</center>

Mypage.php:

<?php
$pseudo="$_POST["pseudo"]";
$mdp="$_POST["mdp"]";
$tonpseudo="ton_pseudo_ici";
$tonmdp="ton_mdp_ici";
//le if qui vérifie si les variables éxistes
if (!empty($pseudo) OR (!empty($mdp))
{
/*
Si les variables sont vides, on redirige l'internaute vers index.php_console=2 on affiche donc le mesqage d erreur n°2
*/
header ("location: /index.php_console=2");
}
//maintenant on test la compatibilité login/mdp
elseif ($pseudo == $tonpseudo AND $mdp == $tonmdp)
{
Bonjour Mr/Mme '.$pseudo.' vous pouvez accéder au site en cliquant <a href="true.php">ici</a>
}
else
{
header ("location: /index.php_console=1");
}
//Script by LordKaizer: http://dz-scripting.com/ (script pour webmaster | http://LordKaizer.tk/ - petit script rigolo pqr moi ;)
?>

Je vous préviens juste que je n'ai pas eu le temps d'éssayer ces codes ^^' donc si il y à une erreur dîtes le
moi en commentaire merci.

Pour terminer:
Oui je sais qu'on peut accéder à la page true.php
MAIS ! A ce que je sache tout le monde n'est pas devin

Ensuite remplacer "true.php" par l'url de votre page qui est protéger et c'est tout.
Je sais que ce code est trés basic j'aurai pus faire plus complexe mais j'ai deja asser mal au doigt comme ça x) !
(je sui sur ipod)


asninfo le 24-08-2011

bjr j'ai créé dans ma base de donnée une table utilisateur donc je voudrais savoir si c possible de recuperer le login et le mot de passe entré dans la bd pour se connecter et comment???

jpjcb66 le 30-06-2011

Merci pour ce tuto qui fonctionne nickel.
Mais celui qui accede à config.php en snifant mon site découvre le password.

yacine31 le 10-06-2011

oui mais c'est quoi le mot de passe svp "BwGk15l8WX"

yacine31 le 10-06-2011

bonjour c'est un super code et merci pour cette aide mais j'ai un petit probleme je n'ai pas compris ou et le mot de passe de l'admin et ou est son pseudo?
merci d'avance

richard le 25-05-2011

bonjour, le code ne marche pas.

Cordialement

bustfly le 13-04-2011

merci beaucoup ca marche nikel

Alexis le 07-04-2011

Re bonjour, j'espère qu'une personne seras m'aider à mon problème (Voir le commentaires juste au dessus, du 06-04-2011)

Donc, bustfly, pour créer une deconnexion, tu fait:
Sur ta page index.php:

echo '<a href="dec.php">Deco</a>';

Ensuite, tu créer un nouveau fichier php que tu met au même endrioit que l'index.php, avec ce contenu:

<?php session_start();
//destruction de toutes les variable de sessions
session_unset();
//destruction de la session
session_destroy();

header("location: index.php") ; ?>

Voila


Ps: http://www.viaphp.net/forum/programmation/17467-proteger-une-page-avec-les-sessions-php


Merci d'avance

Alexis le 06-04-2011

Bonjour, je viens de recuperer votre code, et je voudrais faire:

Prendre les mots de passe et login d'une base de données, au lieu du fichier config.php


Merci d'avance


Cordialement

bustfly le 04-04-2011

bonjour,

merci pour ce super code ça ma bien dépanné, super facile a mettre en œuvre j'ai juste un petit problème, je n'arrive a créer un bouton de déconnexion avec
<?php
session_start();
//destruction de toutes les variable de sessions
session_unset();
//destruction de la session
session_destroy();

header("location: test.php") ;
?>

est ce que quel qu'un pourrait m'éclairé

merci a tous

sky le 24-03-2011

Vedero, ce que tu dit n'est pas correct.
Le système est simple, ça oui, mais ne permet pas la consultation de page si on le configurez correctement.

vedero le 23-03-2011

salut le scripte en lui meme est bien mais ne sert a rien car si je veux protégé exemple index.php
il suffit pour contourné cette page de faire http://monsite.com/index.php et donc je passe pas par form.html mais modifiant un peut sa peut le faire apluche les gents

Niavlys le 09-03-2011

J'aimerai savoir comment on peut ajouter plusieurs utilisateur et non que 1

Alex le 08-02-2011

Marche nickel merci.

Vanessa le 02-02-2011

Bonjour,
J'ai tenté votre code mais je ne sais pas comment le mettre en application pour plusieurs logs... Pouvez vous m'aider ?
Merci

nash le 01-02-2011

mdp = "motdepasse"
identifiant = "login"

nash le 01-02-2011

déconnexion :

<?php
session_start();
//destruction de toutes les variable de sessions
session_unset();
//destruction de la session
session_destroy();

header("location: test.php") ;
?>

0.. le 30-12-2010

mais c'est coi le mots de passe et l'identifiant

Simply02 le 27-12-2010

Merci pour votre script qui a l'air très complet. Pouvez-vous me dire s'il y a un code à rajouter sur chacune des pages à protéger, parce que j'ai vu que le fichier verif.php permettait cela, mais sans doute faut-il y faire appel après dans chaque page ? Merci

sam974 le 01-11-2010

serait il possible de rajouté un bouton déconnecté????

sky le 01-09-2010

Merci Seb, correction effectuée.

Seb le 01-09-2010

Ne fonctionne pas.
Correction : fichier identification.php
remplacer ---->if(($_admin_login == $_POST['login']) && ($password_md5 == $_POST['mdp']))

par

---->if(($_admin_login == $_POST['login']) && ($password_md5 == $_admin_pass))

Bon script!

sky le 29-07-2010

Merci Luc.

Luc le 29-07-2010

Bonjour,
il y a une petite erreure dans le fichier identification.php la variable $login est vide il faut la remplacer par $_admin_login.
Bonne journée

sia_sia le 28-07-2010

si je veux adapté votre code: genre un client dans un site qui créait son identifient et un mot de passe stocké dans une bdd. Comment je fais?

Pseudo
Email
Commentaire

Merci d'écrire le code ici :