Bonjour !
voila je voudrais que l'administrateur puisse fermer toutes les sessions en cours ou seuleument certaines. Cela est il possible ?
Merci
//Trouver le chemin des sessions
$chemin = session_save_path();
dans ce dossier on trouve des fichiers de session dont le nom commence par "sess_" suivi d'un code aléatoire qui représente le SID de la session//Nom du fichier de session
$entrée = "sess_b93495e440ea58498e20d7006899e51b";
//Extraire le SID
preg_match ("#_(.*)$#",$entrée, $partie);
$sid = $partie[1]; //$partie : est un tableau contenant le résultat de preg_match
Pour lire le contenu du fichier on peut utiliser la fonction "file_get_contents", puis décomposer se contenu en tableauCode : Tout sélectionner
variable_1|s:8:"Valeur_1";variable_2|s:8:"Valeur_2";//Trouver le chemin des sessions
$chemin = session_save_path();
//Nom du fichier de session
$entrée = "sess_b93495e440ea58498e20d7006899e51b";
//Lire contenu du fichier de session
$contenu = file_get_contents("$sessions[chemin]/$entrée");
$contenu = explode (";", $contenu); //transformer en tableau (une ligne par variable de session)
if ($contenu) {
foreach ($contenu as $ligne){
//Afficher une ligne du contenu
echo "<p>$ligne";
}
} else echo "<p>Fichier vide";
Mais puisqu'on ne connait pas les noms des fichiers de sessions, on doit parcourir le dossier des sessions pour le faire.//Trouver le chemin des sessions
$chemin = session_save_path();
//Parcourir le chemin
$dossier = opendir($chemin);
while ($entrée = readdir($dossier)){
//Extraire seulement les fichiers (is_file)
if (is_file("$chemin/$entrée")){
echo "<p>Fichier trouvé : $entrée";
}
}
<?php
//Gérer les actions du formulaire
if ($_GET){
extract($_GET);
//Supprimer des fichiers
if ($supprimer && $fichier){
echo "<div class='panneau'><h4 class='alert'>Suppression de fichiers</h4><ul>";
foreach ($fichier as $f){
//si le fichier existe : obtenir le droit de suppression (chmod) et supprimer (unlink)
if ($f && @file_exists($f))
if (@chmod($f, 400) && @unlink ($f)) echo "<li>Le fichier '$f' est supprimé.";
else echo "<li><i>Le fichier '$f' ne peut être supprimé!</i>";
else echo "<li><i>Le fichier '$f' n'existe plus!</i>";
}//fichier suivant
echo "</ul></div>";
}//fin if
}//fin if
//Lister et gérer les sessions ouvertes sur le serveur : le tableau $sessions sera rempli
//Détecter le serveur et le chemin des fichiers de sessions
$sessions["serveur"] = $_SERVER["SERVER_NAME"];
$sessions["chemin"] = session_save_path();
//Parcourir le chemin
$dossier = opendir($sessions["chemin"]);
while ($entrée = readdir($dossier)){
//Extraire les fichiers
if (is_file("$sessions[chemin]/$entrée")){
//Déterminer le SID du fichier de session : généralement compris dans le nom du fichier après un "_"
preg_match ("#_(.*)$#",$entrée, $nom);
$sid = $nom[1]?trim($nom[1]):null;
if ($sid){
//Si le SID est trouvé, il s'agit d'un fichier session : l'enregistrer alors
$sessions["$sid"]["nom_fichier"] = "$sessions[chemin]/$entrée";
$sessions["$sid"]["date_création"] = date("Y-m-d", filectime("$sessions[chemin]/$entrée"));
$sessions["$sid"]["temps_création"] = date("h:m:s", filectime("$sessions[chemin]/$entrée"));
//Lire contenu du fichier de session
$contenu = file_get_contents("$sessions[chemin]/$entrée");
$contenu = explode (";", $contenu); //transformer en tableau (une ligne par variable de session)
if ($contenu) {
foreach ($contenu as $ligne){
//Extraire les paires(variable, valeur) enregistrées dans le fichier
//Les variables de session sont enregistrées sous la forme "variable|type:taille:valeur"
//Ce qui nous intéresse ce sont la variable et sa valeur :
//il faut éliminer donc le "|", le "type", la "taille" et les ":"
preg_match ("#^(.*)\|#", $ligne, $champ1); //$champ1 est la partie "nom de la variable de session"
//si une variable est trouvée, extraire sa valeur
if ($champ1[1]){
preg_match ("#:.*:(.*)$#", $ligne, $champ2); //$champ2 est la partie "valeur de la variable"
//Enregistrer la valeur si existe sinon elle reste nulle
$sessions["$sid"]["$champ1[1]"] = $champ2[1]?trim($champ2[1]):null;
}//fin if
}//fin foreach: ligne suivante du fichier de session en cours
}//fin if
}//fin if
}//fin if
}//fin while: Fichier de session suivant
//Afficher les fichiers sessions trouvés avec menu de gestion
//Un formulaire de gestion
echo "<div class='afficheur'>
<form>
<h1>Gestion des sessions</h1>
<input type=submit name=actualiser value=Actualiser>
<input type=submit name=supprimer value=Supprimer><hr>";
if ($sessions){
//Afficher le chemin des sessions
echo "<p><b>Serveur : </b><i>$sessions[serveur]</i></p>";
echo "<p><b>Chemin des fichiers de sessions: </b><i>$sessions[chemin]</i></p>";
//Parcourir tous les fichiers enregistrés
foreach ($sessions as $sid => $session){
if ($session && is_array($session)){
//Afficher la description et le contenu détaillé du fichier en cours
//Un checkbox permet de sélectionner le fichier
echo "<h2 class='checkbox'><input type=checkbox name=fichier[] value='$session[nom_fichier]'> SID : $sid</h2><ul>";
foreach ($session as $variable => $valeur){
//Afficher donc les variables de session
echo "<li>$variable = $valeur";
}//variable suivante
echo "</ul>";
}//fin if
}//fin foreach: fichier de session suivant
}//fin if
else echo "<p><i>Aucun fichier n'est trouvé</i></p>";
echo "</form></div>";
//Fin.
?>
<style>
.afficheur {position:absolute; top:0; left:0; width:600; height:100%; font-size:14; padding:5}
.panneau {position:absolute; top:0; left:600; width:200; height:100%; font-size:12; color:red;
border-style:solid; border-left-width:1;border-right-width:0;border-top-width:0;border-bottom-width:0;
padding:5}
.alert {background:maroon; color:lightyellow}
.checkbox {background:silver; color:maroon}
</style>
Code : Tout sélectionner
a:3:{i:0;a:2:{s:3:"aaa";i:1;s:3:"bbb";i:2;}i:1;i:2;i:2;i:3;}session_id('b2c2227203b86d40dc58a47d58ce3b48');
session_start();
echo '<pre>';
print_r($_SESSION);
echo '</pre>';$session_file = file_get_contents('/var/lib/php4/sess_b2c2217203b86d40dc58a47d58ce3b48');
$s = preg_split("#(\w+)\|#", $session_file, -1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);
$iMax = count($s);
for($i = 0; $i < $iMax; $i = $i+2) {
$session[$s[$i]] = unserialize($s[$i+1]);
}
echo '<pre>';
print_r($session);
echo '</pre>';