Session qui prend une valeur différente

Eléphant du PHP | 216 Messages

29 sept. 2008, 09:15

Bonjour,

après avoir enregistrer une valeur de session dans un page, $_SESSION['totalttc_port']
je n'ai plus la même valeur dès que je change de page et je n'arrive pas à comprendre pourquoi?

Une chose est sûr c'est que juste avant de changer de page, la valeur de ma session est la bonne :

if (!empty($_GET['dir']) and ($_GET['dir'] == 'paiement'))
{
include ('connect.php');
 
$sqlp = sprintf("update lldiffusion_commande set frais_port=%s,total_ttc=%s,etat=%s  where id=%s", quote_smart($_SESSION["frais_port"]), quote_smart($_SESSION['totalttc_port']), quote_smart('paiement'), quote_smart($_SESSION["commande"]));
$reqp = mysql_query($sqlp) or die('Erreur SQLP !<br>'.$sqlf.'<br>'.mysql_error());
 
mysql_close();
 
header("Location: http://www.lldiffusion.com/paiement.php?pro=livraison");
 
}
 
 

Ensuite, dès que je passe à la page paiement.php, elle prend une valeur différente.

Et he n'arrive pas à savoir pourquoi.

Pour info, la valeur de registers_global est à 1.

Merci d'avance pour votre aide.

Eléphant du PHP | 422 Messages

29 sept. 2008, 09:24

Il ne manque pas un session_start() ?

Eléphant du PHP | 216 Messages

29 sept. 2008, 10:13

Ben non...
Ca aurait été trop simple.

Et puis je pense que sans session_start(), ma page aurait planté au moment ou je fais appel à la session $_SESSION['totalttc_port']

Invité
Invité n'ayant pas de compte PHPfrance

29 sept. 2008, 14:45

j'ai entendu dire que lorsque l'on change de page en spécifiant l'adresse absolue,
php ne passait pas la session car il considère que c'est une faille de sécurité.

Etes-vous au courant.

C'est exactement ce que je fais dans mon code :

header("Location: http://www.testn.com/paiement.php?pro=livraison");

Croyez-vous que ça peut venir de là ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

29 sept. 2008, 15:11

Je peux me tromper, mais je ne pense pas que le problème vienne de là. Le serveur identifie le navigateur de l'utilisateur pour faire suivre la session, et pas la manière dont il a ouvert la page.

En gros, si j'ouvre une session sur un site, que je viens faire un tour sur phpfrance et que je retourne sur mon site, ma session est encore ouverte... donc bien qu'il vaille mieux, à mon avis, utiliser des url relatives lorsque c'est possible, je doute que le problème viennede la :)

Par contre, comme il n'y a pas de exit() après ton header(), php va continuer d'exécuter le code de ta page avant de faire la redirection. Si dans la suite du code tu mets à jour ta variable $_SESSION['totalttc_port'] (ou $totalttc_port si le register globals est à on), alors cette nouvelle valeur sera prise en compte dans la session avant la redirection.

Un exit() après le header() interrompt php juste après la redirection et évite ainsi des traitements inutiles et ce genre de problème :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

29 sept. 2008, 15:41

Alors là, tu m'as donné une bonne piste. :D
Je ne peux pas faire de test aujourd'hui, mais je testerais dans la semaine.
Merci pour ta remarque pertinente.

Bonne journée.

Eléphant du PHP | 216 Messages

30 sept. 2008, 23:02

C'était exactement ça.
Un grand merci.

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]