Sessions

Fermé
parousky Messages postés 325 Date d'inscription mardi 11 septembre 2012 Statut Membre Dernière intervention 20 février 2022 - Modifié par pijaku le 18/12/2013 à 09:33
enqueteactualite Messages postés 70 Date d'inscription mercredi 11 décembre 2013 Statut Membre Dernière intervention 16 mai 2015 - 18 déc. 2013 à 22:35
Bonjour, j'aimerai utiliser le système des sessions pour qu'un visiteur soit toujours connecté en passant de la page 1 à la page 2 s'il s'est connecté sur la page 1. En gros, dans la page 2, si le visiteur est connecté, je fais disparaître les zones de texte où il indique son identifiant et son mot de passe, et s'il n'est pas encore connecté, ces zones de textes restent en place.
Alors pour ce qui est de la connexion sur la page 1, voilà la code :

<?php
if ( !empty($_GET["pseudo"]) && !empty($_GET["passe"]) ) {

 $pseudo = $_GET["pseudo"];
 $passe = $_GET["passe"];
 
 $req = $bdd->prepare('SELECT * FROM utilisateur WHERE pseudo = :pseudo AND passe = :passe'); 
 $req->execute(array( 
 'pseudo' => $pseudo, 
 'passe' => $passe)); 

 $reponse = $req->fetch(); 

 if(!$reponse) 
 { 
 ?>
 
 <p class="mdpouid" id="mdpouidjs">
  Le mot de passe et/ou l identifiant est incorrect
  </p>
  
  <?php
 
  
 } 
 else 
 { 
  session_start(); 
  $_SESSION['pseudo'] = $pseudo; 
  $_SESSION['passe'] = $passe; 
  ?>
  <p class="connectreussie">
  Bienvenue <?php echo $_SESSION['pseudo'];
  ?>
  </p>
  <SCRIPT language="Javascript">
  EffaceC();
  </SCRIPT>
   <?php
  

 
 } 

}
?>






Et en gros, dans la page 2, voilà ce que j'ai marqué :

<?php>
session_start();
?>

<?php

if($_SESSION['pseudo'] AND $_SESSION['passe'])
{
echo "Vous êtes connecté";
}
else
{
echo "Vous devez être connecté pour accéder à vos informations personnelles. </br>
Pour cela, rentrez votre pseudo et votre mot de passe en haut à droite de la page.</br>
 Si vous n'avez pas encore de compte, vous devez vous inscrire.";



}

?>


Mais lorsque je lance la page 2, ça me dit que 'pseudo' n'est pas définie. Alors comment faire ?

8 réponses

gardiendelanuit Messages postés 1770 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 19 novembre 2016 264
Modifié par gardiendelanuit le 17/12/2013 à 16:43
Bonjour,
Commence par mettre
session_start(); 
en première ligne de tous tes scripts.

Merci de mettre "Résolu" quand le problème est réglé!
La connaissance c'est comme la confiture: moins on en a et plus on l'étale.
0
parousky Messages postés 325 Date d'inscription mardi 11 septembre 2012 Statut Membre Dernière intervention 20 février 2022 6
17 déc. 2013 à 17:05
Mais en ce qui concerne ces deux pages, j'ai bien mis session_start();. Mais dans la page 1, je dois aussi mettre session_start(); en première ligne ? Parce que je devrais démarrer la session uniquement si le pseudo et le mot de passe entré sont corrects, non ?
0
gardiendelanuit Messages postés 1770 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 19 novembre 2016 264
17 déc. 2013 à 17:13
Par convention, si l'on veut utiliser à un moment ou a un autre les sessions, il vaut mieux appeler session_start() à la première ligne de chaque script ou de modifier le php.ini pour qu'il le fasse automatiquement.
Ça évite des erreurs bêtes et surtout de s'y retrouver plus facilement.
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
17 déc. 2013 à 17:16
Salut,

Ta condition pour vérifier si l'utilisateur est connecté provoque une erreur si la session n'est pas créée :
if($_SESSION['pseudo'] AND $_SESSION['passe']) 

-> Lire si la valeur de $_SESSION['pseudo'] est vrai et si la valeur $_SESSION['passe'] est vrai alors...

En effet si l'utilisateur ne s'est pas connecté, la variable $_SESSION['pseudo'] n'existe pas et toute utilisation de cette variable provoque une erreur indiquant que la variable n'existe pas : CQFD

Si tu veux tester l'existence de la variable $_SESSION['pseudo'], utilise l'instruction isset() ou empty() :

if(isset($_SESSION['pseudo']) && isset($_SESSION['passe']))

-> Lire si $_SESSION['pseudo'] existe et $_SESSION['passe'] existe alors...

Bonne journée
0
enqueteactualite Messages postés 70 Date d'inscription mercredi 11 décembre 2013 Statut Membre Dernière intervention 16 mai 2015 16
18 déc. 2013 à 09:42
Déjà en début de script à la première ligne tu dois vérifi si une session existe pas pour faire ton contrôle sur le formulaire :

if ( !isset($_SESSION['pseudo']) && !isset($_SESSION['passe']) && !empty($_GET["pseudo"]) && !empty($_GET["passe"]) ) {


et en page 2 tu dois vérifié aussi que la session existe :

if(isset($_SESSION['pseudo']) AND isset($_SESSION['passe']))


si en page 2 ça fonctionne pas alors que ta session existé en page 1 alors essai d'enlever session_start en page 2
0

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

Posez votre question
parousky Messages postés 325 Date d'inscription mardi 11 septembre 2012 Statut Membre Dernière intervention 20 février 2022 6
18 déc. 2013 à 12:26
Je ne sais pas, je n'y arrive pas. J'ai tenté un code très simple, et ça ne marche pas :

<?php
session_start();
?>
<?php
if(isset($_SESSION['pseudo']) AND isset($_SESSION['passe']))
{
echo "Connecté";
}
else
{
echo "Pas connecté";
}
?>
Ceci est le code de la page 2. Et ça me met constamment "Pas connecté", alors que je me suis connecté sur la page 1...
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
18 déc. 2013 à 16:31
Le problème vient peut être de la connexion du coup.

Commence par vérifier le bon fonctionnement de tes sessions avec un code encore plus simple :

pagetest1.php
<?php
session_start();

$_SESSION['pseudo'] = 'toto';
$_SESSION['passe'] = 'secret';

?>
<p>Session créée : </p>
<pre>
<?php var_dump($_SESSION); ?>
</pre>


pagetest2.php
<?php
session_start();
?>
<p>Session actuelle : </p>
<pre>
<?php var_dump($_SESSION); ?>
</pre>
0
enqueteactualite Messages postés 70 Date d'inscription mercredi 11 décembre 2013 Statut Membre Dernière intervention 16 mai 2015 16
18 déc. 2013 à 17:50
Hello,
j'ai vérifié ton code et je vois aucune erreur donc à mon sens tu as plutôt un problème de droit d'écriture en local dans le dossier tmp.

ferme ton programme, EasyPHP ? Wamp ? et ouvre le
en cliquant droit dessus puis en faisant : Exécuter en tant qu'Administrateur

Si ça marche toujours pas alors tu dois regarder dans php.ini la ligne "session.save_path" elle doit contenir le chemin du dossier tmp, si y'a rien tu peux mettre quelque chose comme : session.save_path = "c:/wamp/tmp" en aillant créer le dossier bien sur.
0
parousky Messages postés 325 Date d'inscription mardi 11 septembre 2012 Statut Membre Dernière intervention 20 février 2022 6
18 déc. 2013 à 21:26
Désolé, mais que veux-tu dire par tmp ? Est-ce qu'il doit avoir ce nom là ? Et je dois seulement créer un dossier vide qui s'appelle tmp dans WAMP ?

Et dans php.ini, il y a :

session.save_path = "N;/path"
et aussi :
session.save_path = "N;MODE;/path"

Alors lequel modifier, et est-ce que je dois le modifier ?
0
enqueteactualite Messages postés 70 Date d'inscription mercredi 11 décembre 2013 Statut Membre Dernière intervention 16 mai 2015 16
18 déc. 2013 à 21:29
exécute ton wamp ou easyphp ou autre en mode admin comme je t'ai dis et dit nous si le problème persiste
0
parousky Messages postés 325 Date d'inscription mardi 11 septembre 2012 Statut Membre Dernière intervention 20 février 2022 6
18 déc. 2013 à 22:00
Oui le problème est toujours là, et je lançais toujours WAMP en mode admin, donc ca ne change rien...
0
enqueteactualite Messages postés 70 Date d'inscription mercredi 11 décembre 2013 Statut Membre Dernière intervention 16 mai 2015 16
18 déc. 2013 à 22:35
installe un autre serveur local si tu es motivé car à mon sens ton problème viens de la.
de toute façon ton code est bon.
0