Variable de session qui disparaît mystérieusement

Eléphant du PHP | 447 Messages

18 avr. 2010, 14:31

Hi every one,

J'ai écrit le petit code que voici (il est inclus dans un autre fichier qui contient session_start(); !):
<?php
// Switch Background
$bg = null;
$vid = array('0', '1', '2', '3', '4', '5', '6', '7');

if (isset($_GET['set_bg']) && is_numeric($_GET['set_bg']) && in_array($_GET['set_bg'], $vid)) {

	if ($_GET['set_bg'] == 0) {

		session_destroy();

	}
	else {

		$_SESSION['bg'] = $_GET['set_bg'];

	}

}
if (isset($_SESSION['bg'])) {

	$bg = 'background: #1A1A1A url(\'./img/bg_body'.$_SESSION['bg'].'.jpg\');';

}
else {

	$bg = 'background-color: #333333;';

}
?>
Pour utiliser ce code je fais simplement:
<a href="./index.php?set_bg=X">...</a>

<!-- Où "X" est une valeur de 0 à 7 -->
En local ça marche comme je veux, à savoir que la variable de session perdure d'une page à l'autre une fois qu'une valeur lui a été attribuée, mais dès que je passe en ligne ça ne marche plus... Au chargement de la page dont l'url contient la variable get la variable de session existe, mais si je change de page elle disparaît.

Mystère!

J'ai testé en attribuant une valeur à une autre variable de session via un formulaire en post, et là ça fonctionne normalement, ma variable de session demeure d'une page à l'autre...

Pourquoi, mais alors pourquoi, avec mon code ça foire? Merci bien par avance!

Les bras m'en tombent, j'ai cherché de tous les côtes mais je vois pas de quoi ça vient.

----------------------
EDIT:

en fait elle disparait pas, mais elle ne contient pas la bonne valeur!

Après appel de mon code elle contient ce que je lui ai demandé, par ex.background: #1A1A1A url('./img/bg_body2.jpg'); , mais en changeant de page elle contient background-color: #333333;

Ce qui me surprend grandement vu qu'à aucun moment mon code n'est censé attribué la seconde valeur à ma variable de session! Soit la variable est détruite soit elle contient une valeur sous cette forme background: #1A1A1A url('./img/bg_bodyX.jpg'); mais jamais background-color: #333333;

Le mystère s'épaissit...
Probably (only a) Human Problem?

Eléphant du PHP | 447 Messages

18 avr. 2010, 15:11

Bon, trouvé...

Ca venait du nom de la variable $bg...

J'ai changé son nom et c'est ok.

Je ne sais pas pourquoi php identifie cette variable $bg à $_SESSION['bg']...

En tous cas ça marche.
Probably (only a) Human Problem?

ViPHP
ViPHP | 2287 Messages

18 avr. 2010, 20:51

Hello Stef :)
Je ne sais pas pourquoi php identifie cette variable $bg à $_SESSION['bg']...
Un peu tard, mais la réponse est par ici : http://php.net/manual/fr/security.globals.php

Ça peut être une bonne idée de désactiver cette directive, si tu le peux. Il est possible aussi qu'elle saute lors de tes futures montées en version de PHP...
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Eléphant du PHP | 447 Messages

18 avr. 2010, 21:47

Hello Stef :)
Je ne sais pas pourquoi php identifie cette variable $bg à $_SESSION['bg']...
Un peu tard, mais la réponse est par ici : http://php.net/manual/fr/security.globals.php

Ça peut être une bonne idée de désactiver cette directive, si tu le peux. Il est possible aussi qu'elle saute lors de tes futures montées en version de PHP...
Zut, c'est à on chez moi (ovh, en mutualisé).

Merci bien pour l'info, j'avais déjà entendu parler de ça sans jamais vraiment comprendre les incidences... Là je comprends bien mieux.

Merci beaucoup Calim! : )
Probably (only a) Human Problem?