Bonjour,

Voila je rencontre un petit problème avec mon code.

Lorsque que je modifie la superglobale $_SESSION dans un script -genre $_SESSION['admin']='adm' -alors que la variable existe déjà dans le fichier de session (admin: user), la mise à jour dans le fichier de session ne se fait pas en fin d'exécution du script. En fait, il y a bien une MAJ de faite mais avec la valeur de $_SESSION['adm'] telle qu'elle était après le session_start() qui a précédé le changement (donc 'user').

En effet, quand je lance un autre script, et après un session_start, la superglobale ne se charge pas avec la dernière valeur affectée à la variable mais avec la toute première (admin: user). Il n'y a donc pas eu de MAJ de la variable 'admin' dans le fichier de session. Par contre, une toute nouvelle variable ($_SESSION['youpi']='cool') ne pose pas de problème.

Cordialement,

TLB

4 réponses


Bonjour.
Ce n'est pas très explicite ce que tu nous dit.
Il faudrait déja que nous sachions dans quel sens tu veux modifier la valeur dans la session, caar si tu commences par vouloir modifier la valeur dans la session par adm, mais que plus loin tu définies la valeur par user, c'est sûr que la dernière valeur assignée sera user, donc si tu veux assigner une valeur par défaut, soit tu t'assure bien que la définition de la valeur est bien définie avant toute modification de celle-ci, ou alors tu vérifies que la clé dans la session n'existe pas déjà, par exemple :

if (session_status() == PHP_SESSION_NONE) {
    session_start();
}
if (!array_key_exists('admin', $_SESSION)) {
    $_SESSION['admin'] = 'user';
}

De cette manière, si la clé admin existe déja dans la variable de session, sa valeur ne sera pas écrasée, dans le cas contraire sa valeur sera user.

Voici un schéma simplifié :

A l'ouverture du site, une session est ouverte (via session_start) puis on a un $_SESSION['admin']='user'. => FIN DU SCRIPT (aucun problème)

Après cela, en cliquant sur un lien, on a un nouveau session_start suivi de $_SESSION['admin']='adm' suivi d'un if($_SESSION['admin']='adm') {//vue admin}=> FIN DU SCRIPT (sans repasser par un éventuel $_SESSION['admin']='user'). Pour ce script là la vue est bonne puisque qu'elle se base sur la dernière valeur de $_SESSION['admin'].

Ensuite, en cliquant sur un autre lien, on a un nouveau session_start, suivi d'un if($_SESSION['admin']='adm') {//vue admin} => FIN DU SCRIPT. Et là problème car $_SESSION['admin'] vaut 'user'. Et non pas la dernière valeur affectée qui est admin.

Clairement, lorsqu'une variable est nouvelle dans $_SESSION ma maj dans le fichier de session se fait mais pas quand elle existe déjà.

Salut;

Montre un peu de code ;)

@plu
Pierre

Faison encore plus simple et imaginons que j'exécute ces scripts l'un après l'autre (on admettra que les trois scripts comportent un session_start chacun placé avant le doctype et qu'il s'agit a chaque fois de la même session comme en témoigne le cookie phpsessid et le fichier de session) :

Script 1 :

 $_SESSION['admin'] = a;

Script 2 :

 $_SESSION['admin'] = b;

Script 3 :

 echo $_SESSION['admin']; //affiche 'a'.