Page 1 sur 2

problème variables de cession

Posté : 22 juin 2010, 15:43
par Bosse.cie
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 :
<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.

Re: problème variables de cession

Posté : 22 juin 2010, 17:39
par Bosse.cie
J'avance dans l'incompréhension !

Je m'explique :

J'ai tenté dans mon fichier verif.php de mettre un session_start en début de page; c'est à dire que je me retrouve avec deux session-start dans cette page en différents endroits, alors là, tout marche !

Re: problème variables de cession

Posté : 22 juin 2010, 20:56
par Aureusms
Tu as bien marqué session_start() ? (et pas session-start)

Re: problème variables de cession

Posté : 22 juin 2010, 23:18
par Bosse.cie
Non, non, c'est bien session_start(), tel qui est écrit dans le bout de code que j'ai mis de verif.php; c'est du copier - coller.

Maintenant, avec ces deux session_start(), ça fonctionne bien, mais je trouve ça bizarre quan même...

Re: problème variables de cession

Posté : 23 juin 2010, 09:51
par Aureusms
Je viens de lire ton fichier verif.php et j'ai vu cela :
$test_session = session_start();
session_start(); est une pseudo fonction i.e. qui doit s'écrire session_start(); toute seule comme une grande. Elle ne retourne rien hormis qu'elle informe PHP que la page utilise les sessions. Donc ta variable $test_session sera NULL. si tu veux tester les sessions écris plutôt :
<?php
session_start(); // toute seul en début de page même si tu pourrait le mettre n'importe où mais toute seule
if (isset($_SESSION))
{
  //test OK
}
else
{
  // TEST PAS OK
}
?>

Re: problème variables de cession

Posté : 24 juin 2010, 14:13
par Bosse.cie
Bonjour,

Merci Aureusms; j'ai fait la modification. c'est un truc que j'avais lu je ne sais plus dans quels tutoriels...

Par contre, de nouveau, ça ne fonctionne plus !

Depuis ce matin, lorsque je me connecte pour la première fois, la seconde page ne trouve pas les variables d'identifications, et la deuxième fois, oui (si je n'ai pas effacé le cookie entre temps).

Je n'ai strictement rien changé sur cette page entre hier et aujourd'hui !

C'est un problème qui me bloque depuis maintenant 3 jours; alors si vous avez une idée, je suis preneur.

Merci

Michel

Re: problème variables de cession

Posté : 24 juin 2010, 14:16
par stealth35
Hello, pendant tes tests met toi en erreur E_ALL | E_STRICT
il te reste de la place sur ton serveur ? ça met déjà arrivée de ne plus avoir de place et les fichier de session ne pouvais pas s'écrire, regarde aussi du coté de
session.gc_probability et session.gc_divisor (tout ca dans ton php.ini)

Re: problème variables de cession

Posté : 24 juin 2010, 14:32
par Bosse.cie
Hello, pendant tes tests met toi en erreur E_ALL | E_STRICT
il te reste de la place sur ton serveur ? ça met déjà arrivée de ne plus avoir de place et les fichier de session ne pouvais pas s'écrire, regarde aussi du coté de
session.gc_probability et session.gc_divisor (tout ca dans ton php.ini)
E_ALL|E_STRICT, c'est quelle variable ?

Pour la place, pas de problème. C'est mon serveur local, et il n'y a que ça pour l'instant.

Sinon, il y a encore du "nouveau".

Comme je l'ai dit précédemment, ce qui fonctionnait (sans que je comprenne trop pourquoi) ne fonctionnait plus tout à l'heure.

Du coup, j'ai mis dans mon fichier verif.php un "echo" pour savoir si je passait bien par là. Je sauvegarde, je re-tente :

Ca fonctionne de nouveau !

J'ai enlevé mon "echo", et ça fonctionne toujours.
Ça a l'air complètement aléatoire.
Bref, je comprend de moins en moins.

Et comment tester une erreur qui n'arrive plus ? ...

Re: problème variables de cession

Posté : 24 juin 2010, 14:36
par stealth35
E_ALL | E_STRICT c'est pour error_reporting

fais un petit
var_dump(ini_get('error_reporting'), ini_get('session.gc_probability'), ini_get('session.gc_divisor'));
:wink:

Re: problème variables de cession

Posté : 24 juin 2010, 14:47
par Bosse.cie
Réponse : 6135, 0 pour session.gc_probably et 100 pour session.gc_division.

Re: problème variables de cession

Posté : 24 juin 2010, 14:53
par stealth35
Réponse : 6135, 0 pour session.gc_probably et 100 pour session.gc_division.

ton session.gc_probably devrai au moins être a 1, sinon il supprime pas les sessions ca peu créer des confis :wink:

Re: problème variables de cession

Posté : 24 juin 2010, 15:00
par Bosse.cie
Je vais voir ça, merci.

Mais elle correspond à quoi cette valeur ?

Re: problème variables de cession

Posté : 24 juin 2010, 15:02
par stealth35
Je vais voir ça, merci.

Mais elle correspond à quoi cette valeur ?
http://fr.php.net/manual/fr/session.con ... robability

:wink:

c'est la chance de supprimer les sessions périmées

Re: problème variables de cession

Posté : 24 juin 2010, 15:10
par Bosse.cie
Merci.

Par contre, je vois que la valeur par défaut est normalement à 1; et la mienne était à 0, alors que je n'y ais pas touché.

Je suis sous ubuntu, peut-être cela vient-il d'eux ? !

En tous cas, merci, et je re-viendrais appeler à l'aide si ça recommence.

Michel

Re: problème variables de cession

Posté : 24 juin 2010, 15:14
par stealth35
Merci.

Par contre, je vois que la valeur par défaut est normalement à 1; et la mienne était à 0, alors que je n'y ais pas touché.

Je suis sous ubuntu, peut-être cela vient-il d'eux ? !

En tous cas, merci, et je re-viendrais appeler à l'aide si ça recommence.

Michel
c'est possible, moi avec un install standard de la 5.3 mon session.gc_divisor est à 1000 alors que la valeur par défaut c'est 100