[register_globals et session]
register_globals http://fr.php.net/manual/fr/security.globals.php
Salutations chers Développeurs.
J’ai rencontré un bug assai bizarre sur un site.
Mon code qui marchait très bien jusqu'à maintenant ne marche plus.
Mon code avant :
Explication :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 //fichier ma_selection.php #Démarrage de la session session_start() ; # Récupération de la sélection $id_selection = false ; if(isset($_SESSION['id_selection'])) {$id_selection = $_SESSION['id_selection'];} if(isset($_GET['id_selection'])) {$id_selection = $_GET['id_selection'];} if(isset($_POST['id_selection'])) {$id_selection = $_POST['id_selection'];} if($id_selection === false) { header ("location: mes_selections.php"); } $_SESSION['id_selection'] = $id_selection ;
Mon but est d’avoir un identifiant de sélection : $id_selection
Je crée donc la variable $id_selection et je lui donne une valeur par défaut : false
Ensuite je cherche une valeur pour ma variable.
D’abord dans la session, puis dans les paramètres GET et enfin dans POST.
Enfin je teste si ma variable est toujours égale (en type et en valeur ( = = = )) a false.
Si c’est le cas c’est que je n’ai pas d’identifiant de sélection disponible et donc je quitte cette page.
Sinon j’enregistre mon identifiant de sélection dans la session afin de pouvoir le récupérer au prochain appel à la page.
Le premier appel à la page ce fait ainsi :
ma_selection.php ?id_selection=666
L’identifiant est bien récupéré dans GET et enregistré en session.
Les autres appels n’ont plus besoin de préciser la sélection.
Ce code marché correctement sur le serveur avec register_globals = On et marche toujours en local.
Puis le problème suivant est apparut.
La création de la variable $id_selection = false ; est effectué correctement. Mais il n’est plus possible de le récupérer dans la session.
(La première affectation par GET marche Et $_SESSION['id_selection'] a bien sa valeur en début de script !!)
Comme si $id_selection refusait de changer de valeur !!
___________
J’ai dans un premier temps réglé le problème de la façon suivante
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 //fichier ma_selection.php #Démarrage de la session session_start() ; # Récupération de la sélection //$id_selection = false ; if(isset($_SESSION['id_selection'])) {$id_selection = $_SESSION['id_selection'];} if(isset($_GET['id_selection'])) {$id_selection = $_GET['id_selection'];} if(isset($_POST['id_selection'])) {$id_selection = $_POST['id_selection'];} //if($id_selection === false) if($id_selection == ) { header ("location: mes_selections.php"); } $_SESSION['id_selection'] = $id_selection ;
J’ai discuté du problème avec mon administrateur serveur et il m’a orienté vers le register_globals
(Qui été à On sur le serveur et a Off chez moi, en local)
Et il se trouve que mettre register_globals = Off règle le problème.
…
Mais pourquoi ?
Il ne me semble pas que ma méthode de programmation initial ne soit pas compatible avec register_globals = On , Au contraire ! J’ai essayé de développer de tel façon que mon code soit réutilisable quelque soit la configuration de cette variable et de façon a éliminé tout comportement aléatoire du à une variable auto définit.
Si quelqu’un peut éclairer ma lanterne.
Merci d’avance et bon code @Tous.
Partager