Voila,
je réalise actuellement un site web php permettant de gérer l'administration d'un club de ski dans le cadre de mon projet de fin d'études.
Je bloque sur un soucis de session depuis quelques jours. J'ai passer des heures à rechercher sur google une solutions, en vain...
Mon problème est le suivant:
Lorsque l'utilisateur arrive sur mon site, il doit s'authentifier. Sur authentification réussie, je démarre la session et je définis une variable ($_SESSION['autorise'] = 'oui') que je teste sur les pages.
J'arrive à entrer sur la page d'administration (admin.php). Mais, ensuite, lorsque je clique sur un lien de mon menu (lien <a href>), je perds la session... :'(
Je n'arrive pas à trouver comment faire pour que ma session reste ouverte.
Le code de ma page login.php
<div id="login">
<form action="../php/gestionCompte.php" method="post">
<table>
<tr>
<td>Nom d'utilisateur</td>
<td><input type="text" name="nomUtilisateur" /></td>
</tr>
<tr>
<td>Mot de passe</td>
<td><input type="password" name="motPasse" /></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="action" value="Se connecter" /></td>
</tr>
<tr>
<td>
<a class="lienEcritPetit" href="perduMotPasse.html">Mot de passe perdu?</a>
</td>
<td><a class="lienEcritPetit" href="creerCompte.php">S'inscrire</a></td>
</tr>
</table>
</form>
</div>
Le bout de code qui contrôle le login (gestionCompte.php):
// Test si tous les champs du formulaire ont été remplis
if(($_POST['nomUtilisateur'] && $_POST['motPasse']) != null) {
// Préparation de la requête pour rechercher si le login existe
$rechercheUtilisateur = 'SELECT PK_LOGIN FROM T_LOGIN ';
$rechercheUtilisateur .= 'WHERE NOMUTILISATEUR="'.$_POST['nomUtilisateur'];
$rechercheUtilisateur .= '" AND MOTDEPASSE=MD5("'.$_POST['motPasse'].'")';
include('db_open.php');
$resultat = mysql_query($rechercheUtilisateur);
$nbUtilisateurTrouve = mysql_num_rows($resultat);
// Si le nombre d'utilisateur trouvé en base de données est
// différent de 1 (pas de doublons possibles,
// donc 1 ou 0 retourné)
if($nbUtilisateurTrouve != 1) {
include('db_close.php');
$_SESSION['erreur'] = 'utilisateurIntrouvable';
header('Location:../../index.php');
}
else {
// Démarrage de la session
session_start();
// Définition de la variable du nom de l'utilisateur
$_SESSION['username'] = $_POST['nomUtilisateur'];
$_SESSION['autorise'] = 'oui';
$pos = 0; // incrémentation dans le tableau $droitsAcces
$droitsAcces = array(); // variable qui contiendra les droits de l'utilisateur
$lesDroits = ''; // variable contenant la chaîne définissant les droits de l'utilisateur.
// Requête pour retrouver les droits d'accès de l'utilisateur
$droitsAccesUtilisateur = 'SELECT FK_DROIT_ACCES FROM R_DROIT_ACCES_LOGIN ';
$droitsAccesUtilisateur .= 'INNER JOIN T_LOGIN ON PK_LOGIN = FK_LOGIN ';
$droitsAccesUtilisateur .= 'WHERE NOMUTILISATEUR="'.$_POST['nomUtilisateur'].'"';
$droitsAccesUtilisateur .= 'ORDER BY FK_DROIT_ACCES ASC';
// Exécution de la requête
$resultat = mysql_query($droitsAccesUtilisateur) or die (mysql_error());
// Récupération des droits d'accès dans la variable $droitsAcces
while($enregistrement = mysql_fetch_assoc($resultat)) {
$droitsAcces[$pos] = $enregistrement['FK_DROIT_ACCES'];
$pos++;
}
// Fermeture de la base de données
include('db_close.php');
for($i = 0; $i < sizeof($droitsAcces); $i++) {
$lesDroits .= $droitsAcces[$i];
}
// Appel du bon menu
$_SESSION['droits'] = $lesDroits;
include('../pages/admin.php');
//header('Location:../pages/admin.php');
}
}
Ma page admin.php
<?php
if(isset($_SESSION['autorise'])) {
$acces = $_SESSION['autorise'];
if($acces != 'oui') {
include('../index.php');
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" type="text/css" href="../../css/screen.css" />
<title>Esaho-ski Admin</title>
</head>
<body>
<div id="page">
<div id="entete"></div>
<div id="menu">
<h3>Menu</h3>
<p><a href="../pages/admin.php">Accueil</a></p>
</div>
<div id="contenu">
<h1>Gestion des membres et des activités d'un ski club</h1>
<?php
echo $_SESSION['autorise'];
?>
</div>
</div>
<div id="pied"></div>
</body>
</html>
Voila. Donc en cliquant sur le lien "Accueil", je dois revenir sur la même page. Mais là, je suis redirigée vers la page de login, car il me perd la session...
Quelqu'un aurait une idée ?
Je vous remercie d'avance pour votre aide.