problème variables de cession
Posté : 22 juin 2010, 15:43
Bonjour,
Voilà, pour un domaine réservé, j'appelle une page index.php dans laquelle je demande le nom d'utilisateur et le mot de passe.
Ce formulaire appelle ensuite par "action" une page verif.php qui teste si le nom d'utilisateur et le mot de passe sont bons dans ma base de données. Les deux variables ont été passées par un POST.
Si le résultat est négatif, je retourne à ma première page.
Si le résultat est positif,
j'initialise la cession, et crée des variables $_SESSION contenant entre autres, l'id, le nom d'utilisateur, etc...
Enfin, j'inclus (require_once) une page "menu.php" qui contient les options de menu (pas encore implémentées).
Ma page menu.php commence par un "require_once" qui appelle une page "controle.php" qui contrôle que la cession est bonne dans le cas où l'on appelle directement cette page.
C'est au niveau de mon fichier "controle.php", que ce révèle un problème.
Dans celui-ci, pour l'instant, je n'ai que des tests d'existence des variable $_SESSION que j'ai créé précédemment.
Quand j'arrive sur cette page menu.php, pas de problème; la vérification de la cession est bonne.
Par contre, si j'appelle dans le lien de menu la page paye.php (la seule que j'ai commencée à implémenter), et qui commence par un appel à controle.php, le test échoue; les variables de cession ne sont pas trouvées.
Mon cookie de cession, j'ai vérifié est bien présent.
Par contre, si je relance ma page de demande de nom et mot de passe SANS EFFACER LE COOKIE, et que je refais le trajet, ce coup-ci, ça marche !
Là, j'ai vraiment du mal à comprendre.
Ma page index.php simplifiée, mais très simple :
Voilà, pour un domaine réservé, j'appelle une page index.php dans laquelle je demande le nom d'utilisateur et le mot de passe.
Ce formulaire appelle ensuite par "action" une page verif.php qui teste si le nom d'utilisateur et le mot de passe sont bons dans ma base de données. Les deux variables ont été passées par un POST.
Si le résultat est négatif, je retourne à ma première page.
Si le résultat est positif,
j'initialise la cession, et crée des variables $_SESSION contenant entre autres, l'id, le nom d'utilisateur, etc...
Enfin, j'inclus (require_once) une page "menu.php" qui contient les options de menu (pas encore implémentées).
Ma page menu.php commence par un "require_once" qui appelle une page "controle.php" qui contrôle que la cession est bonne dans le cas où l'on appelle directement cette page.
C'est au niveau de mon fichier "controle.php", que ce révèle un problème.
Dans celui-ci, pour l'instant, je n'ai que des tests d'existence des variable $_SESSION que j'ai créé précédemment.
Quand j'arrive sur cette page menu.php, pas de problème; la vérification de la cession est bonne.
Par contre, si j'appelle dans le lien de menu la page paye.php (la seule que j'ai commencée à implémenter), et qui commence par un appel à controle.php, le test échoue; les variables de cession ne sont pas trouvées.
Mon cookie de cession, j'ai vérifié est bien présent.
Par contre, si je relance ma page de demande de nom et mot de passe SANS EFFACER LE COOKIE, et que je refais le trajet, ce coup-ci, ça marche !
Là, j'ai vraiment du mal à comprendre.
Ma page index.php simplifiée, mais très simple :
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>BIENVENUE</title>
<link rel="StyleSheet" type="text/css" href="graphisme/style.css">
</head>
<body>
<h1>
SAISIE MOT DE PASSE
</h1>
<div class="commentaire">
Votre mot de passe est personnel, ainsi que votre nom d'identifiant.<br />
ils ne doivent jamais être communiqué à quiconque<br />
<br />
Si vous désirez le changer, contactez-moi. <br />
</div>
<br />
<br />
<br />
<br />
<form method="post" action="verif.php" accept-charset="UTF-8">
<div class="centrer">
<h3>ENTREZ VOTRE IDENTIFIANT DE CONNEXION</h3>
<input name="nom" type="text" size=25 maxlength=25 value =""/>
<br />
<br />
<br />
<br />
<h3>ENTREZ VOTRE MOT DE PASSE</h3>
<input name="saisie" type="password" size=25 maxlegth=25 />
<br />
<br />
<br />
<br />
<button type="submit">
<img src="graphisme/confirmation.gif" alt="ENVOYER">
</button>
</div>
</form>
<body>
</html>
Ma page verif.php :
require_once("graphisme/appel/f_verif.php"); //contient la fonction de vérification dans la bdd et de message d'erreur
//verification identifiant et cle
if (!isset($_POST["nom"]) || strlen($_POST["nom"]) < 5 || strlen($_POST["nom"]) > 25)
erreur(1);
$teste=nettoyage(0, $_POST["nom"]);
if (strcmp($teste, $_POST["nom"]))
erreur(2); //cas où des caractères interdits ont été tentés de passer
if (!isset($_POST["saisie"]) || strlen($_POST["saisie"]) < 5 || strlen($_POST["saisie"]) > 25)
erreur(1);
$teste=nettoyage(0,$_POST["saisie"]);
if (strcmp($teste, $_POST["saisie"]))
erreur(2);
if (!verif_ident($_POST["nom"], $_POST["saisie"]))
erreur(1); //fonction présente dans f_verif.php
//Identification correcte
session_set_cookie_params(5400,"/","", true);
$test_session = session_start();
if (!$test_session) erreur(2); //fin pour cause d'erreur session
$_SESSION["ident"] = $_POST["nom"];
$_SESSION["niveau"] = 1; // a modifier ultérieurement pour faire varier les droits
$_SESSION["ip"] = $_SERVER["REMOTE_ADDR"];
$_SESSION["motpasse"] = $_POST["saisie"];
unset ($_POST["nom"], $_POST["saisie"], $identite, $suite);
$_SESSION["idauto"] = session_id();
require_once ("menu.php"); // j'insere ma page suivante
?>
Ma page menu.php (également très simple et qui fonctionne) :
<?php
require_once("graphisme/appel/controle.php");
?>
<html>
<head>
<link rel="StyleSheet" type="text/css" href="graphisme/style.css">
<title>Menu</title>
</head>
<body>
<h1>MENU</h1>
<div class=elt_menu>
<h3>Fiches de paye</h3>
<a href="paye.php?origine=1&option=1">
Nouvelle fiche de paye<br /><br />
</a>
<a href="paye.php?origine=1&option=2">
Consultation des fiches de paye
</a>
<h3>Contrats de travail</h3>
<a href="contrat.php?origine=1&option=1">
Nouveau contrat de travail<br /><br />
</a>
<a href="contrat.php?origine=1&option=2">
Consultation des contrats de travail
</a>
<h3>Employés</h3>
<a href="employe.php?origine=1&option=1">
Saisie d'un nouvel employé<br /><br />
</a>
<a href="employe.php?origine=1&option=2">
Consultation du fichier des employés
</a>
</div>
</body>
</html>
Ma page paye.php (qui est à peine commencée) :
<?php
session_start();
require_once("graphisme/appel/entete.php");
require_once("graphisme/appel/controle.php");
/?>
Et enfin ma page controle.php, elle aussi très simple et que j'ai limité pour tenter de cerner le problème :
<?php
/************************
* Contrôles d'identite *
************************/
if (!isset($_SESSION["ident"]) || !isset($_SESSION["niveau"]) || !isset($_SESSION["ip"]))
echo ("Zut1");
if (!isset($_SESSION["motpasse"]) || !isset($_SESSION["idauto"]))
echo ("Zut22");
if (strcmp($_SESSION["ip"], $_SERVER["REMOTE_ADDR"])) //ip changée entre les deux pages !
echo ("Zut3");
if (strcmp($_SESSION["idauto"], session_id())) // mauvaise id session
echo ("Zut5 : ".session_id());
?>
EDIT : Désolé pour la longueur.