toujours un souci de session

toujours un souci de session - PHP - Programmation

Marsh Posté le 16-08-2004 à 11:19:18    

Bonjour à tous,
 
J'ai déjà demandé une aide à ce sujet mais toutes les modifs qui m'ont été conseillées ont été faites mais sans succès.
L'identification se déroule correctement a priori, c'est à partir de l'affichage de la page accueil que cela se complique, a priori elle ne détecte pas la session ouverte et n'affiche pas les variables de session. J'ai donc "Bonjour" au lieu de "Bonjour Seb".  
Je vous colle mes scripts et j'attends vos remarques.
Pour ma part je n'ai pas l'impression que ce soit un souci PHP mais plutot un souci de config soit dans php.ini ou ailleurs, Qu'en pensez-vous ?
 
page index.php
 
<Html>
<Head>
<title>Bienvenue sur Planvac v1.0</title>
<link rel="stylesheet" href="pages/vac.css" type="text/css">
 
<script language="javascript">
function popup01(){
window.open("/pages/lostmdp.html","new","width=280,height=112,resize=no,scrollbars=no" )
}
</script>
</Head>
<body vlink="#FFFFFF">
<p align="left"><img src="Images/logo.jpg" width="140"></p><p>&nbsp;</p>
<p>&nbsp;</p>
<p align="center"><table width="70%" border="2" bordercolor="#FFFF00"><tr><td>&nbsp;<p align='center'><b><font size='5'>Bienvenue sur Planvac <font size="3">v</font>1.0</font></b></p>&nbsp;</td></tr></table>
<p>&nbsp;</p>
<p align="center"><table width="70%" border="2" bordercolor="#FFFF00">
<tr><td>
&nbsp;
<form action="login.php" method="post" name="form">
<div align="center"><table width="40%" border="0" cellspacing="1" cellpadding="3">
  <tr>  
    <td><div align="right"><b>Login :</b></div></td>
    <td><div align="left"><input type="text" name="login" value="" size="15" maxlength="15"></div></td>
  </tr>
<tr>  
    <td>
</td>
  </tr>
  <tr>  
    <td><div align="right"><b>Mot de passe :</b></div></td>
    <td><div align="left"><input type="password" name="pass" value="" size="15" maxlength="15"></div></td>
  </tr>
<tr>  
<td colspan="2">
</td>
</tr>
  <tr>  
<td colspan="2"><p align="center"><input type="submit" value="Connexion" name="send"></p></td>
</tr>
<tr>  
    <td>
</td>
  </tr>
<tr>
<td colspan="2"><p>&nbsp;</p>
    <p align="center"><font size="2"><u><a href="javascript:popup01()">Oubli de mot de passe, cliquez ici</a></u></font></p>
</td>
  </tr>
</table></div>
</form>
</td></tr></table>
</body>
</Html>
 
page login.php
 
<?
$login=$_POST['login'];  
$pass=$_POST['pass'];  
 
$db = mysql_connect ('host', 'user', 'pass');  
mysql_select_db ('vac_db',$db);  
 
if($login=='' || $pass=='')  
    {  
  include('index.php'); // On inclus le formulaire d'identification
  echo '<p align="center"><font size="4" color="red"><b>Vous avez oublié de remplir un champ.</b></font></p>';  
    exit;  
    }  
 
// on recupère le password de la table qui correspond au login du visiteur  
$sql = 'SELECT id,pass,prénom FROM profils WHERE login=\''.$login.'\'';  
$req = mysql_query($sql,$db) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());  
 
$data = mysql_fetch_array($req);  
if($data['pass'] != $pass)  
    {  
    include('index.php'); // On inclus le formulaire d'identification
  echo '<p align="center"><font size="4" color="red"><b>Mauvais login / password. Merci de recommencer</b></font></p>';  
    exit;  
    }  
else  
    {
  session_start();  
    session_register('login');
 
  header("Location: pages/accueil.php" );  
    }  
?>
 
page accueil.php
 
<?
session_start();
$_SESSION['login'] = $_POST['login'];
if(!isset($_SESSION['login']))
{
header('Location: /.../index.php');
exit();
}
?>
<Html>
<Head>
<title>Accueil Planvac v1.0</title>
<link rel="stylesheet" href="vac.css" type="text/css">
</head>
<body>
<?
echo "Bonjour {$_SESSION['login']}";
?>
</body>
</html>
 
 
Donc pour vous aider, index.php est le formulaire d'authentification qui inclut login.php afin d'analyser la saisie. Puis si l'utilisateur est connu de la base alors la page accueil devrait s'afficher.
 
Merci d'avance

Reply

Marsh Posté le 16-08-2004 à 11:19:18   

Reply

Marsh Posté le 16-08-2004 à 13:33:51    

Le problème est dans accueil.php :
 

Code :
  1. session_start();
  2. $_SESSION['login'] = $_POST['login'];

 
 
Tu redefinis ta variable de session login en lui atribuant la valeur de $_POST['login'] qui dans ton cas est une chaine vide (ou NULL). Vires la ligne pour voir ...


Message édité par BenJ9002 le 16-08-2004 à 13:34:24
Reply

Marsh Posté le 16-08-2004 à 14:16:18    

<?
session_start();
if(!isset($_SESSION['login']))
{
header('Location: /.../index.php');
exit();
}
?>
<Html>
<Head>
<title>Accueil Planvac v1.0</title>
<link rel="stylesheet" href="vac.css" type="text/css">
</head>
<body>
<?
echo "Bonjour {$_SESSION['login']}";
?>
</body>
</html>
 
voilà le nouveau code de ma page accueil.php
 
En fait a priori elle execute le code en tout début de page càd qu'elle me recharge la page index.php.
J'ai vraiment l'impression de ne pas avoir de session ouverte.
 
Mais merci qd même pour ton aide

Reply

Marsh Posté le 16-08-2004 à 14:33:22    

J'avais pas lu le code de la page login.php ...  
 
Vérifies que tu travailles pas avec register_globals à off, et d'autre part la fonction session_register est plus trop appropriée ... http://fr2.php.net/session_register  
Des fois, c'est interessant la doc php ...

Citation :

Si vous utilisez $_SESSION (ou $HTTP_SESSION_VARS), n'utilisez pas session_register()


 
Remplace

Code :
  1. session_register('login');


par

Code :
  1. $_SESSION['login']=$login;


Message édité par BenJ9002 le 16-08-2004 à 14:34:24
Reply

Marsh Posté le 16-08-2004 à 14:44:07    

MERCCIIIIIIIIII !!!
Ca y est tu me sauves de la dépression nerveuse.
 
De quel doc Php tu parles ? je suis allé sur PhpDébutant mais a priori le site est pas très à jour.
J'ai acheté un bouquin Php avec Dreamweaver malheureusement dans la boite ou je suis ce n'est pas Dreamweaver MX alors je programme en code direct.
Donc si au passage tu as quelques liens à me passer, ca serait encore + sympa même si avec ce que tu as déjà fait pour moi c plus que suffisant.
 
Encore merci
:jap:

Reply

Marsh Posté le 16-08-2004 à 14:58:20    

sebounet62 a écrit :

MERCCIIIIIIIIII !!!
Ca y est tu me sauves de la dépression nerveuse.
 
De quel doc Php tu parles ? je suis allé sur PhpDébutant mais a priori le site est pas très à jour.
J'ai acheté un bouquin Php avec Dreamweaver malheureusement dans la boite ou je suis ce n'est pas Dreamweaver MX alors je programme en code direct.
Donc si au passage tu as quelques liens à me passer, ca serait encore + sympa même si avec ce que tu as déjà fait pour moi c plus que suffisant.
 
Encore merci
:jap:

Pour les docs:
http://www.nexen.net/docs/php/annotee/manuel_tocd.php
http://www.php.net/manual/fr/
 
En cherchant un peu, tu dervrais même trouver des versions offline (html, pdf, ps, chm)

Reply

Marsh Posté le 16-08-2004 à 16:22:41    

Ok merci.
 
J'ai maintenant un autre souci. Si je suis chiant dites le. LOL
J'ai consulté les 2 sites que vous m'avez fourni mais sans grand succès dans mes recherches.
J'ai lu qu'une session est ouverte jusqu'à fermeture de l'explorateur. Est ce que les variables le sont elles aussi?
Je m'explique, dans ma page login.php j'effectue ma requete et demande la récupération des infos suivantes: id,nom,prénom,type.
J'ai réussi à afficher le prénom sur la page Accueil.
J'ai maintenant une page qui est un lien se situant sur cette page accueil et qui est réservé au type "Admin".
J'ai donc insérer ce code en tête de page:
 
<?
session_start();
if($_SESSION['type']!='admin')
{
echo('Vous n'avez pas les autorisations pour accéder à cette page.')
header('Location: accueil.php');
exit();
}
?>
 
Mais cela ne fonctionne pas.
Je pense que je dois déclarer cette variable dans ma page accueil à cause du register_global_off mais comment SVP ?
 
Merci encore.


Message édité par sebounet62 le 16-08-2004 à 16:23:39
Reply

Marsh Posté le 16-08-2004 à 16:33:32    

Ben avec un test par exemple sur le pseudo lors de ton login :

Code :
  1. if ($login=='admin') { $_SESSION['type']='admin'; }


 
Les variables de session, c'est comme les variables normales, faut les initialiser avec quelque chose dedans pour que y ait quelque chose dedans justement ...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed