Fichier de session incorrect (manque des données) lorsqu'on modifie sa fiche dans l'espace privé #3548

Closed
opened 7 years ago by marcimat · 7 comments
marcimat commented 7 years ago
Owner

Lorsqu'on se modifie soi-même dans l'espace privé via le formulaire editer auteur, le fichier de session créé ne contient plus le statut (et d'autres choses).

  • L'appel de auteur_modifier() exécute actualiser_sessions($session); avec les données postées du formulaire (donc, pas tout ce qu'il y a dans la session)
  • actualiser_session() voit qu'on se modifie soi-même (depuis r22107) et appelle ajouter_session($auteur); dans ce cas
  • ajouter_session() appelle ecrire_fichier_session($fichier_session, $auteur) qui réécrit le fichier de session, avec donc, des champs en moins.
  • paf !

Lorsqu'un auteur a plusieurs fichiers de sessions cependant, la suite de actualiser_sessions() va recréer les fichiers en mergeant les contenus, et donc au final, on ne voit pas beaucoup de différence.
Le bug apparaît uniquement donc si l'auteur qui se modifie n'a qu'1 seul fichier de session.

IE: pour reproduire :

  • vider tmp/sessions
  • ou se déconnecter depuis l'interface privé, puis se reconnecter (une seule fois, avec 1 seul navigateur donc).
Lorsqu'on se modifie soi-même dans l'espace privé via le formulaire editer auteur, le fichier de session créé ne contient plus le statut (et d'autres choses). - L'appel de auteur_modifier() exécute actualiser_sessions($session); avec les données postées du formulaire (donc, pas tout ce qu'il y a dans la session) - actualiser_session() voit qu'on se modifie soi-même (depuis r22107) et appelle ajouter_session($auteur); dans ce cas - ajouter_session() appelle ecrire_fichier_session($fichier_session, $auteur) qui réécrit le fichier de session, avec donc, des champs en moins. - paf ! Lorsqu'un auteur a plusieurs fichiers de sessions cependant, la suite de actualiser_sessions() va recréer les fichiers en mergeant les contenus, et donc au final, on ne voit pas beaucoup de différence. Le bug apparaît uniquement donc si l'auteur qui se modifie n'a qu'1 seul fichier de session. IE: pour reproduire : - vider tmp/sessions - ou se déconnecter depuis l'interface privé, puis se reconnecter (une seule fois, avec 1 seul navigateur donc).
Poster
Owner

Il me semble voir un autre bug potentiel en relisant r22109 :

Si l'on fait :

  • session_set('toto'); // enlever toto
  • suivi dans le même hit de :
  • session_set('toto', 'hop');

Il me semble que $remove est peuplée, et que cela va supprimer toto en fin de hit.
Dans le else de session_set(), donc en cas d'affectation, il faudrait peut être enlever un éventuel $nom du tableau $remove, puisque ce n'est plus le cas. Non ?
C'est à dire actuellement là https://core.spip.net/projects/spip/repository/entry/spip/ecrire/inc/session.php#L304

Il me semble voir un autre bug *potentiel* en relisant r22109 : Si l'on fait : - `session_set('toto'); // enlever toto` - suivi dans le même hit de : - `session_set('toto', 'hop');` Il me semble que `$remove` est peuplée, et que cela va supprimer toto en fin de hit. Dans le else de session_set(), donc en cas d'affectation, il faudrait peut être enlever un éventuel `$nom` du tableau `$remove`, puisque ce n'est plus le cas. Non ? C'est à dire actuellement là https://core.spip.net/projects/spip/repository/entry/spip/ecrire/inc/session.php#L304
Poster
Owner

Ce point précis du commentaire 1 était effectivement bien réel après vérification. J'ai corrigé de la sorte ce détail avec r22418

Ce point précis du commentaire 1 était effectivement bien réel après vérification. J'ai corrigé de la sorte ce détail avec r22418
Poster
Owner

J'ai bien un patch, mais je suis pas certain du tout des implications que cela comporte.
Il suffit de merger la globale visiteur_session avec $auteur si on s'édite soi-même, avant d'appeler ajouter_session().
Ça corrige le problème sur le formulaire d'édition d'auteur. Mais ça crée peut être d'autres soucis que je n'ai pas encore en tête.

J'ai bien un patch, mais je suis pas certain du tout des implications que cela comporte. Il suffit de merger la globale visiteur_session avec $auteur si on s'édite soi-même, avant d'appeler ajouter_session(). Ça corrige le problème sur le formulaire d'édition d'auteur. Mais ça crée peut être d'autres soucis que je n'ai pas encore en tête.

Je confirme le problème, et je confirme que le patch le corrige, sans effet secondaire détecté.

Je confirme le problème, et je confirme que le patch le corrige, sans effet secondaire détecté.
Poster
Owner

J'ai envoyé le patch dans le core par r22500.
On verra bien.
Statut changé à Résolu

J'ai envoyé le patch dans le core par r22500. On verra bien. **Statut changé à Résolu**
Poster
Owner

Et bien il manquait vraisemblablement une petite chose, ajoutée par r22502, en relation avec #3388

Et bien il manquait vraisemblablement une petite chose, ajoutée par r22502, en relation avec #3388
Poster
Owner

Statut changé à Fermé

**Statut changé à Fermé**
Sign in to join this conversation.
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date

No due date set.

Dependencies

This issue currently doesn't have any dependencies.

Loading…
There is no content yet.