Récuperer (et non pas charger) une session à partir de l'id de session

Petit nouveau ! | 3 Messages

06 déc. 2023, 11:52

Bonjour,

J'ai besoin de lire les données d'une session à partir de l'ID de session
Je parle bien de récupérer les données de la session concernée (array équivalent à $_SESSION) et non pas de changer la session en remplacement de la session courante

Par exemple, j'ai ma session courante, j'utilise mes propres données de session (lecture/ecriture) mais à coté, sans changer ma session courante, j'ai besoin d'avoir un array contenant les données d'une autre session XXXXX

Auriez vous des pistes ?
Merci

Avatar du membre
Mammouth du PHP | 1609 Messages

06 déc. 2023, 12:33

Salut, la comme ça sans trop réfléchir, j'irai directement lire le contenu du fichier de session en question. Un simple session_decode d'un file_get_contents devrait suffire.
Modifié en dernier par Saian le 06 déc. 2023, 12:52, modifié 1 fois.
Développeur web depuis + de 20 ans

Petit nouveau ! | 3 Messages

06 déc. 2023, 12:51

Salut, la comme ça sans trop réfléchir, j'irai directement lire le contenu du fichier de session en question.
Merci pour ta réponse
J'y avais pensé aussi mais j'espere pouvoir passer par le gestionnaire de session de PHP afin de ne pas me poser la question de la gestion. C'est à dire ne pas avoir besoin de gérer l'expiration, ne pas devoir changer le code si on décide de passer les sessions en base ou Redis par exemple etc etc

Avoir donc un acces plus haut niveau et bénéficier de la mécanique en place

Avatar du membre
Mammouth du PHP | 1609 Messages

06 déc. 2023, 13:01

Dans ce cas à part basculer sur l'autre session puis revenir à la session originale, pas sûr qu'il y ait de solution. Et pas sûr qu'il n'y ait pas de perte de données sans avoir testé.
Développeur web depuis + de 20 ans

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

06 déc. 2023, 13:10

Peut-être une piste :
https://www.php.net/manual/fr/sessionha ... e.read.php

A noter que cette méthode est normalement pour un usage interne à PHP, je ne sais pas dans quelle mesure ça pourrait être utilisé dans un script maison.
Quand tout le reste a échoué, lisez le mode d'emploi...

Avatar du membre
Mammouth du PHP | 1609 Messages

06 déc. 2023, 13:58

Re, ça me semble un peu bourrin mais c'est un proof of concept qui a l'air de bien fonctionner sans rien casser.
function readSession(string $sessionId): array
{
    $originalSessionId = session_id();
    session_write_close();

    session_id($sessionId);
    session_start();

    $session = $_SESSION;
    session_write_close();

    session_id($originalSessionId);
    session_start();

    return $session;
}

PS : si tu trouves une solution qui correspond à toutes tes exigences je serais curieux de savoir comment tu as fait.
Développeur web depuis + de 20 ans

Petit nouveau ! | 3 Messages

06 déc. 2023, 15:25

Merci à tous pour les différentes pistes

Comme ça tournera dans un environnement Symfony, je vais voir s'il y a des classes et services qui apportent des solutions et au pire, je vais en effet, faire ainsi, charger la nouvelle session, lancer les traitements qui vont bien et rétablir la session d'origine

Encore merci

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

06 déc. 2023, 17:10

Je ne sais pas ce que tu essayes de faire et je ne connais pas les contraintes de ton application, mais il faut tout de même signaler que si tu dois aller lire des infos dans des sessions d'autres utilisateurs, c'est probablement que tu as un souci dans la conception/l'architecture de ton applicatif, car les sessions ne sont pas faites pour cet usage.

S'il y a des données d'autres utilisateurs qui doivent être consultables, il faut les rattacher à mon sens à ces utilisateurs dans une BDD proprement avec un identifiant unique, et pas un ID de session temporaire.
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 49 Messages

11 janv. 2024, 04:48

Je dirais pareil que la plus part des réponses je doute qu'il soit possible de récupérer les datas d'une autre session sachant que le but d'une session est d'être une session pas 2 ni 10 et de pouvoir justement travaillé les données de la session ouverte çà serait porte ouverte au hacking gratuit de plus et comme dit plus haut tu as un gros probléme de conception si tel est le cas dans un site à aucun moment tu dois avoir besoin et n'a besoin de data d'une autre session.
Chaque utilisateur à ses propres données cela voudrait dire que n'importe quel utilisateur aurait accés au données d'autre utilisateur connécté ? Aucun sens ...
Plutôt être que paraître !