Problème session_start

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème session_start

par supercanard » 12 oct. 2007, 13:27

Je viens de mettre GET_ mais ça ne change rien. En fait voilà dans l'ordre comment ça se déroule :

Je passe une variable $alerte=$variable1 par une url

Dans mon code j'ai

$variable1 ='message';

echo $alerte


Une piste : Si je place echo $alerte en tout début e page, donc avant session(), le message s'affiche.

Sinon j'ai essayé avec header(), mais j'ai un message d'erreur....


ps : Avant que je n'ai le problème avec les sessions je n'avais pas ce nouveau problème. je comprend plus rien :lol:

par Ryle » 12 oct. 2007, 13:21

le register_globals doit être à "on" sur l'un des deux... utilises $_GET['alerte'] pour récupérer ta valeur qui est passée en get plutôt que $alerte (voir la FAQ pour plus d'info sur le register global et les risques associés), cela fonctionnera sur l'un comme sur l'autre :)

Edit : A noter que pour ta redirection, au lieu de mettre un code javascript, si jamais tu n'as pas envoyé de données au navigateur (cf. ce qui a été dit sur les sessions) tu peux aussi le faire à l'aide d'un header('Location:....') ca sera plus propre et ne dépendra pas de l'activation de javascript sur le navigateur :)

par supercanard » 12 oct. 2007, 11:24

Ben vi, c'est ça :)

Et tu n'es pas obligé de l'initialiser $_SESSION['identifiant'] avant dans la mesure où tu la déclares et l'initialise en même temps. En revanche le fait de l'initialiser te permettra d'être sur de la trouver en session (même si elle est vide), et tu ne seras pas obligé de tester si elle est présente (avec isSet) pour l'utiliser :) (juste faire un empty() pour vérifier qu'elle n'est pas vide :))


Pas compris la seconde question par contre....
Oki merci pour l'explication.

Pour le deuxième point c'est simple; Comme tu vois quand il ya erreur d'identification je recharge la page en passant une variable. (cette variable est défini dans un fichier var.php qui contient un message) : echo '<script langage="text/javascript">document.location.href="index.php?page=connexion&alerte='.$mess_motpasse.'"</script>';

Dans la page en question j'ai un echo $alerte, qui n'affiche rien en tant normal, mais qui devrais afficher le contenu de la variable passé par le lien quand j'en passe une.

Ca marche aléatoirement. Je teste le sript sur deux hébergement. Sur l'un le echo renvois bien le message sur l'autre non.

par Ryle » 12 oct. 2007, 11:19

Ben vi, c'est ça :)

Et tu n'es pas obligé de l'initialiser $_SESSION['identifiant'] avant dans la mesure où tu la déclares et l'initialise en même temps. En revanche le fait de l'initialiser te permettra d'être sur de la trouver en session (même si elle est vide), et tu ne seras pas obligé de tester si elle est présente (avec isSet) pour l'utiliser :) (juste faire un empty() pour vérifier qu'elle n'est pas vide :))


Pas compris la seconde question par contre....

par supercanard » 12 oct. 2007, 11:00

En fait je ne veut pas vérifier que la session est ouverte dès le début.

Je crois que j'ai réussi.

Au tout début sur la page index j'ouvre une session avec rien dedans
session()
Ensuite quand on s'identifie je test si c'est correct, je créé la variable de session et je redirige :
<?php
if (isset($_POST['identifiant'])) {
  if (empty($_POST['identifiant']) || empty($_POST['passe'])) {
	exit();
	}
	if ($_POST['identifiant'] != $identifiant) { // SI IDENTIFIANT INCORRECT
		echo '<script langage="text/javascript">document.location.href="index.php?page=connexion&alerte='.$mess_identifiant.'"</script>';
		exit();
	}
	if ($_POST['identifiant'] == $identifiant) { // SI IDENTIFIANT OK
		if ($_POST['passe'] != $passe) { // Si pass incorrect
		echo '<script langage="text/javascript">document.location.href="index.php?page=connexion&alerte='.$mess_motpasse.'"</script>';
		exit();
    }
    if ($_POST['passe'] == $passe) { // Si pass correct
  	$_SESSION['identifiant']= $identifiant;
		echo '<script langage="text/javascript">document.location.href="administration.php"</script>';
    }
	}
}
?>
Par contre du coup vu que la variable $_SESSION['utilisateur'] n'existe pas avant , dois-je l'initialiser auparavant ? $_SESSION['utilisateur']= ''

Maintenant j'ai un autre problème : Mes variables contenant les message d'erreur (ex : $mess_motpasse) ne s'affiche plus sur la page mais ils apparaissent dans l'url.
Ca aussi il me semble que ça a un rapport avec la config php et les variables globales ? Enfin je crois...

par Ryle » 12 oct. 2007, 10:37

C'est encore plus simple... tu démarres la session au début de ton script, si tu as besoin d'y stocker des paramètres tu le fais, si tu n'en as pas besoin, tu ne le fais pas et ils n'y seront pas, pis c'est tout :)
session_start();
...
    if ($_POST['identifiant'] != $identifiant) { // SI IDENTIFIANT KO 
       ...
    } 
    else { // SI IDENTIFIANT OK 
       if (...) {
          ...
       } 
       else { 
          $_SESSION['identifiant']= $_POST['identifiant']; 
          ...
       } 
    } 
...
Et puis par la suite suffit de regarder dans ton code si $_SESSION['identifiant'] existe pour savoir si l'utilisateur s'est authentifié correctement :)

par supercanard » 11 oct. 2007, 19:42

Maintenant oui je comprends... il a fallu le temps

Donc pour remédier au probleme il faut que j'ouvre une session au tout début si aucune n'existe avec une variable identifiant valeur bidon et que lors de la connexion, si tout est bon, je passe remplace la valeur bidon par la correct ?

par Tracker » 11 oct. 2007, 18:14

tu fais un <?php echo .... à la ligne 33
et ton <?php include $url {connexion.php qui fait le session_start()} est à la ligne 62

??!! Tu vois sans doute le problème, non ?

[edit]
la réponse était pour le faire pardonner d'avoir pourri ton post avec mes boulettes :wink:

par supercanard » 11 oct. 2007, 18:07

Wahouu, alors là :afraid: , c'est 'Mystère et boules de gommes...', :afraid: (roulements de tambour)

En fait tu viens de lire la réponse que j'ai faite à un post sur les fichiers CSV ???!!!
Alors je suis incapable de te dire pourquoi c'est tombé chez toi, en tout cas désolé (si un modo pouvait faire migrer ma réponse ou la virer...)

a+
Oui je vois ta réponse.
J'ai bien pensé que c'était une erreur mais bon j'étais pas nomplus sur à 100% :wink:

par Tracker » 11 oct. 2007, 18:05

Wahouu, alors là :afraid: , c'est 'Mystère et boules de gommes...', :afraid: (roulements de tambours)

En fait tu viens de lire la réponse que j'ai faite à un post sur les fichiers CSV ???!!!
Alors je suis incapable de te dire pourquoi c'est tombé chez toi, en tout cas désolé (si un modo pouvait faire migrer ma réponse ou la virer...)

a+

par supercanard » 11 oct. 2007, 17:58

Si ton code tourne avec une version de PHP >= 5.10RC1, Utilise la fonction
fputcsv(...);
Alors là je nage, dans l'océan :D
J'ai regardé la doc de la fonction, enfin ce que j'ai trouvé derrière son lien et je suis complètement largué sur le rapport avec mon problème.

Bon donc si j'ai bien compris j'ai envoyé quelquechose au navigateur avant de faire mon session().
Sinon dans mes echo '<script>...' je vois pas lequel peut bien s'éxecutter vu que j'ai mis des conditions... Bon allez j'y retourne, je vais bien trouver
:D

par Tracker » 11 oct. 2007, 17:39

Si ton code tourne avec une version de PHP >= 5.10RC1, Utilise la fonction
fputcsv(...);

par supercanard » 11 oct. 2007, 17:37

bah dans ton fichier index.php, tu dois avoir un envoi de données vers le navigateur à la ligne 33.. donc déjà identifier la ligne en question.

C'est probablement l'un de tes echo '<script>...'; qui est exécuté, et donc envoi du code html au navigateur qui dès lors ne supportera plus de header ou d'envoi de cookie (et donc de session si celle ci est basée sur les cookies, ce qui est le cas par défaut)
Ligne 33 j'ai un echo avec une donnée que j'ai sortie de ma base... mais comme il y a des includes aussi...

Ma page index donne ça :

Code : Tout sélectionner

<?php // c // c // c // c include 'var.php'; include 'config.php'; include 'fonc.php'; $req_config= mysql_query("SELECT titre,description,motscles,css FROM bloom_config WHERE id=1"); // CONFIG $data_config= mysql_fetch_array($req_config); $req_menu= mysql_query("SELECT id,nom_lien FROM bloom_pages WHERE visible=1 ORDER BY pos_lien"); // MENU switch($page) { default : // PAR DEFAUT ON AFFICHE LA PAGE D'ACCUEIL (ID=1) $id=1; $url= 'lecturepage.php'; break; case 'connexion': $url= 'connexion.php'; break; case 'lecturepage': $url= 'lecturepage.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" xml:lang="cs" lang="cs"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title><?php echo $data_config['titre'] ?></title> <meta name="description" content="<?php echo $data_config['description'] ?>" /> <meta name="keywords" content="<?php echo $data_config['motscles'] ?>" /> <link rel="stylesheet" href="styles.css" type="text/css" /> <style type="text/css"> <?php echo $data_config['css'] ?> </style> <script language="javascript" type="text/javascript" src="js.js"></script> </head> <body> <div id="containeur"> <div id="head"><h1>BloOm CMS !</h1></div> <div id="gauche"> <div id="menu"> <ul> <?php while ($data_menu= mysql_fetch_array($req_menu)) { // BOUCLE MENU echo '<li><a href="index.php?page=lecturepage&id='.$data_menu['id'].'">'.$data_menu['nom_lien'].'</a></li>'; } ?> </ul> </div> </div> <div id="droite"> <?php include $url ?> </div> <div id="foot"> <?php include'foot.php' ?> </div> </div> </body> </html>
Et la page connexion qui est incluse :

Code : Tout sélectionner

<?php if (isset($_POST['identifiant'])) { if ($_POST['identifiant'] != $identifiant) { // SI IDENTIFIANT INCORRECT echo '<script langage="text/javascript">document.location.href="index.php?page=connexion&alerte='.$mess_identifiant.'"</script>'; exit(); } if ($_POST['identifiant'] == $identifiant) { // SI IDENTIFIANT OK if ($_POST['passe'] != $passe) { // Si pass incorrect echo '<script langage="text/javascript">document.location.href="index.php?page=connexion&alerte='.$mess_motpasse.'"</script>'; exit(); } else { session_start(); // Sinon debut session $_SESSION['identifiant']= $_POST['identifiant']; header ('location:administration.php'); } } } ?> <h1>Connexion</h1> <?php echo $alerte ?> <form method="post" action="index.php?page=connexion"> <p><label>Identifiant : </label><input type="text" name="identifiant" /></p> <p><label>Mot de passe : </label><input type="password" name="passe" /></p> <p><input type="submit" value="OK"</p> </form>
Donc bon il faut que je me penche sur les sessions
Mais je comprend toujours pas ce qui est envoyé :cry: [/php]

par Ryle » 11 oct. 2007, 16:44

bah dans ton fichier index.php, tu dois avoir un envoi de données vers le navigateur à la ligne 33.. donc déjà identifier la ligne en question.

C'est probablement l'un de tes echo '<script>...'; qui est exécuté, et donc envoi du code html au navigateur qui dès lors ne supportera plus de header ou d'envoi de cookie (et donc de session si celle ci est basée sur les cookies, ce qui est le cas par défaut)

par supercanard » 11 oct. 2007, 16:36

Ben là faut que je regarde la doc de plus près je crois =)
Par contre je comprends pas le passage sur l'envoi d'infos ligne 33...