Authentification session php avec souspage(s)

Fermé
Dbl35 Messages postés 71 Date d'inscription mardi 19 novembre 2013 Statut Membre Dernière intervention 11 juillet 2015 - 11 août 2014 à 15:17
Dbl35 Messages postés 71 Date d'inscription mardi 19 novembre 2013 Statut Membre Dernière intervention 11 juillet 2015 - 14 août 2014 à 12:51
Bonjour,

J'ai protégé l'accès à une page comme cela ( codes forum(s)):

La page à ouvrir après authentification => pageorigine.php
<?php
// poursuite session
session_start();
// teste existence variable de session existe + valeur
if(empty($_SESSION['login']))
{
// Si inexistante ou nulle, redirection vers le formulaire d'authentification
header('Location: http://www.monsite.eu/checkauthentification.php');
exit();
}
?>

Le checkauthentification
<?php
// Definition constantes & variables
define('LOGIN','momo');
define('PASSWORD','mama');
$errorMessage = '';
// Test envoi formulaire
if(!empty($_POST))
{
// Contrôle envoi identifiant ?
if(!empty($_POST['login']) && !empty($_POST['password']))
{
// comparaison constantes ?
if($_POST['login'] !== LOGIN)
{
$errorMessage = 'Erreur login !';
}
elseif($_POST['password'] !== PASSWORD)
{
$errorMessage = 'Erreur password !';
}
else
{
// ouverture session
session_start();
// enregistrement le login en session
$_SESSION['login'] = LOGIN;
// redirection vers le fichier vers pageorigine.php si OK
header('Location: http://www.monsite.eu/pageorigine.php.php');
exit();
}
}
else
{
$errorMessage = 'Merci de réinscrire vos identifiants';
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<title>Formulaire d'authentification</title>
</head>
<body>
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post">
<fieldset>
<legend>Merci de vous authentifier</legend>

<p>
<label for="login">Login :</label>
<input type="text" name="login" id="login" value="" />
</p>
<p>
<label for="password">Password :</label>
<input type="password" name="password" id="password" value="" />
<input type="submit" name="submit" value="Se connecter en session sécurisée" />
</p>
</fieldset>
</form>
</body>
</html>

Tout cela fonctionne correctement, mais voila, j'ai des "souspages" dans mon IHM d'origine
pageorigine.php
- souspage1.php
- souspage2.php
-....

si je place le même code (cidessous) aux souspages.php, je dois à chaque fois retaper le code d'authentification, comment je peux éviter cela, sachant que les souspage ne doivent pas être accessible en URL directe , auquel cas il faut repasser par le checkauthentification
<?php
session_start();
if(empty($_SESSION['login']))
{
header('Location: http://www.monsite/checkauthentification.php');
exit();
}
?>

j'ai essayé plusieurs codes mais je n'y arrive pas, quelqu'un peut il m'aider ?
Si vous remarquez quelque chose dans le code, n'hésitez pas à m'en faire part.
MERCI D'AVANCE
Daniel






6 réponses

fil5m Messages postés 9 Date d'inscription dimanche 3 août 2014 Statut Membre Dernière intervention 12 août 2014 1
Modifié par fil5m le 12/08/2014 à 04:16
Comme tu as plus d'une page à protéger, je te conseille cette hiérarchie de fichiers :

authentication.php => elle contiendra ton formulaire d'authentification
check_authentication.php => à inclure en haut de tes pages à protéger (elle validera la session

check_authentication.php :
<?php
session_start();
if(!isset($_SESSION['login'])) //Ou encore empty si tu le souhaites
{
    header("Location: authentication.php");
    exit;
}


Une sous-page :
<?php
include_once("check_authentication.php");

/* Le reste de ta page protégée */


authentication.php :

<?php
session_start();

define('LOGIN','momo');
define('PASSWORD','mama'); 

if(isset($_POST['login'], $_POST['password']))
{
    if($_POST['login'] === LOGIN && $_POST['password'] === PASSWORD)
    {
          $_SESSION['login'] = true;
          header("Location: pageorigine.php");
          exit;
    }
}

?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<title>Formulaire d'authentification</title>
</head>
<body>
<form action="authentication.php" method="post">
<fieldset>
<legend>Merci de vous authentifier</legend>

<p>
<label for="login">Login :</label>
<input type="text" name="login" id="login" value="" />
</p>
<p>
<label for="password">Password :</label>
<input type="password" name="password" id="password" value="" />
<input type="submit" name="submit" value="Se connecter en session sécurisée" />
</p>
</fieldset>
</form>
</body>
</html> 
0
Dbl35 Messages postés 71 Date d'inscription mardi 19 novembre 2013 Statut Membre Dernière intervention 11 juillet 2015
12 août 2014 à 10:44
Bonjour,

merci pour ton aide, je vois ça ce matin et reviens vite vers toi.
daniel
0
Dbl35 Messages postés 71 Date d'inscription mardi 19 novembre 2013 Statut Membre Dernière intervention 11 juillet 2015
12 août 2014 à 14:12
(re)

j'essaie d'appliquer la hiérarchie que tu m'indiques, mais je dois faire une erreur.
Tout est Ok sauf que je peux ouvrir une souspage.php directement par son URL sans alors repasser en authentification.

Je ne suis pas sûr d'avoir tout compris ou peut être que je me suis aussi mal expliqué ?

Voilà,

J'ai un fichier "origine.php" qui contient un fichier index.php, ce qui m'amène sur l'ihm "origine" via l'index.php qu'il contient.

Dans ce fichier index.php j'ai implanté un ensemble de lien vers des "souspages" qui sont contenues dans ce même fichier comme cidessous
Chaque sous page ouvre une nouvelle IHM sécurisée

Fichier origine.php qui contient :
- index.php ( avec les liens qui pointent vers les fichiers "souspages.php" ci dessous
- "souspage1.php"
- "souspage2.php"
- ..

Donc après avoir placé mon fichier "authentication.php" ( que j'ai transformé en authentification.php)

je dois bien ensuite mettre le code ci dessous dans mon fichier index.php
<?php
session_start();
if(!isset($_SESSION['login'])) //Ou encore empty si tu le souhaites
{
header("Location: authentication.php");
exit;
}

puis encore ensuite le code suivant dans les "souspages.php"
<?php
include_once("check_authentication.php");
?>
<html .....</html>

peux me dire ou est mon erreur.

merci encore de ton aide, je suis pas un pro php, que je trouve par ailleurs pas mal
daniel
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
12 août 2014 à 15:13
Salut,

Tes souspages sont elles dans le même dossier que le fichier check_authentification.php ?

Si ce n'est pas le cas, le chemin vers ce fichier dans l'instruction include_once n'est pas correct, donc l'authentification n'est pas effectuée.

Bonne journée
0

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

Posez votre question
Dbl35 Messages postés 71 Date d'inscription mardi 19 novembre 2013 Statut Membre Dernière intervention 11 juillet 2015
12 août 2014 à 18:31
bonjour, merci d'intervenir,

J'ai suivi et tout implanté les .php dans le même dossier :
IhmWebPlatform.php
- index.php
- authentification.php
- souspage1.php
- souspage2.php
- ..............

si je tape directement l'URL pour se connecter en privé (IhmWebPlatform.php), l'authentification.php demande le code, si code Ok, je suis logué , sinon ça passe pas. donc tout est oK jusque là.

Une fois logué sur IhmWebPlatform.php, si je clique sur le lien souspage.php, pas de problème, je suis également bien redirigé , la session étant ouverte.

Jusque là, tout va bien.

Là ou ça ne va pas, si je tape directement l'URL d'une souspage.php, elle s'ouvre sans passer par authentification.php ?? ( Cache navigateur nettoyé), c'est pas normal.

Donc le problème devrait venir du code souspage.php puisque maintenant tout les .php sont dans le même dossier IhmWebPlatform.php.

Le code "souspage.php"
<?php
include_once('check_authentification.php');
?>

<html >.....</html>


Le code authentification.php
<?php
session_start();
define('LOGIN','momo');
define('PASSWORD','mama');
if(isset($_POST['login'], $_POST['password']))
{
if($_POST['login'] === LOGIN && $_POST['password'] === PASSWORD)
{
$_SESSION['login'] = true;
header("Location: http://www...../IhmWebPlatform.php");
exit;
}
}
?>



et mon code sur index.php // de "IhmWebPlatform.php"
<?php
session_start();
if(!isset($_SESSION['login']))
{
header("Location: http://www...../IhmWebPlatform.php"/authentification.php");
exit;
}
?>


et ça marche pas avec les souspages, je ne vois plus ce qui ne vas pas ... tout me paraît normal ..
Ou est mon erreur ?

merci du coup de main
0
Dbl35 Messages postés 71 Date d'inscription mardi 19 novembre 2013 Statut Membre Dernière intervention 11 juillet 2015
14 août 2014 à 12:51
bonjour, je n'arrive toujours pas à réaliser la protection de mes pages .. J'ai positionné tout mes .php dans ce même dossier, je comprends pas..

pour mémoire revoila le code
FORMULAIRE ==> authentication.php
<?php
session_start();
define('LOGIN','momo');
define('PASSWORD','mama');
if(isset($_POST['login'], $_POST['password']))
{
if($_POST['login'] === LOGIN && $_POST['password'] === PASSWORD)
{
$_SESSION['login'] = true;
header("Location: index.php");
exit;
}
}
?>

CODE index.php du DOSSIER
<?php
session_start();
if(!isset($_SESSION['login']))
{
header("Location: authentication.php");
exit;
}
?>

Code sur les autres pages du dossier.php
<?php
include_once("check_authentication.php");
?>

merci de m'éclairer
dan
0