web-dev-qa-db-fra.com

En boucle à travers toutes les sessions d'un serveur dans PHP

Existe-t-il un moyen dans PHP d’obtenir une liste de toutes les sessions (et des variables qu’elles contiennent) sur le serveur?

En gros, nous avons une fonction de maintenance qui a besoin de savoir quels utilisateurs sont actuellement connectés au site. Nous stockons déjà des données pour chaque utilisateur dans une variable de session, mais j'espère pouvoir parcourir en boucle chacune de ces sessions et extraire les données dont j'ai besoin.

MON PHP est très limité (je suis généralement développeur .Net), mais si quelqu'un sait si cela est possible (et comment le faire), je vous en serais très reconnaissant. J'ai googlé ceci, et les résultats que j'ai trouvés avaient tendance à indiquer que ce n'était PAS possible, mais je trouve cela très difficile à accepter.

Cependant, si vous ne le pouvez pas, je pensais que mes amis de StackOverflow pourraient me donner une réponse définitive!

40
Ash

Voici un moyen plus succinct d’obtenir une liste de sessions via les fichiers stockés:

<?php
print_r(scandir(session_save_path()));
?>
7
Alastair

Cela vous donnera les données pour toutes les sessions, stockées dans un tableau et indexées par identifiant de session:

<?php
$allSessions = [];
$sessionNames = scandir(session_save_path());

foreach($sessionNames as $sessionName) {
    $sessionName = str_replace("sess_","",$sessionName);
    if(strpos($sessionName,".") === false) { //This skips temp files that aren't sessions
        session_id($sessionName);
        session_start();
        $allSessions[$sessionName] = $_SESSION;
        session_abort();
    }
}
print_r($allSessions);
4
mgroat

J'ai utilisé la méthode @mgroat dans l'appel ajax, mais il y a un problème dans l'en-tête de la réponse HTTP: l'en-tête Set-Cookie apparaît plusieurs fois et jQuery signale une erreur:

L'en-tête Set-Cookie est ignoré en réponse à url: mysite.com/admin/ajax/main_ajax. La longueur du cookie devrait être inférieure à inférieur ou égal à 4096 caractères.

La solution consiste à ajouter header_remove("Set-Cookie") juste après session_start().

0
Wooya