Déconnecter de force toutes les sessions PHP

Petit nouveau ! | 4 Messages

30 déc. 2011, 11:00

Bonjour à tous !!

Je suis nouveau sur le forum, pardonnez moi d'avance si je poste au mauvais endroit :).

J'ai un petit soucis, j'ai un client qui souhaite disposer d'un bouton dans son interface d'administration permettant de "déconnecter tous les utilisateurs en cours" .

Le client est issu d'un milieu as400 ou ce genre d'actions est habituel mais en PHP je vois mal comment supprimer toutes les sessions serveur et non uniquement la session en cours...

Évidemment il y a des astuces bricoles du style "mettre a 1 une valeur disconnectAll" en base et faire la vérif à chaque chargement de page pour supprimer la session de l'utilisateur courant" mais ce n'est ni propre ni optimisé, et je pense qu'il y a plus simple.

Avez vous une idée?

Merci

ViPHP
xTG
ViPHP | 7331 Messages

30 déc. 2011, 11:37

Supprimer tous les fichiers de sessions sur le serveur ?
C'est pas plus propre mais bon... C'est pas très propre en fait de vouloir déconnecter des clients comme ça.
Le système de session de PHP n'a jamais été développé dans cette optique car il est là pour permettre la sauvegarde d'informations pour une visite et non pour l'identification d'un client (même si on peut partir du principe que si on stocke des infos sur une visite on identifie le visiteur mais bon c'est pas réellement la même chose).

Petit nouveau ! | 4 Messages

30 déc. 2011, 12:58

J'en suis conscient, mais je n'ai pas vraiment le choix, "vox cliens, vox dei" comme qui dirait...

En revanche je ne souhaite pas supprimer "toutes les sessions du serveur" mais uniquement certaines sessions ciblées.

Merci pour ta réponse :), j’espère que quelqu'un pourras me dépanner.

ViPHP
xTG
ViPHP | 7331 Messages

30 déc. 2011, 13:10

Il faut dans ce cas gérer toi même ton propre système de session avec une base de données (avec mise à jour sur chaque page ect).
Car sinon tu seras incapable d'identifier dans le tintouin si les sessions sont toujours actives, et surtout ce qu'elles renferment...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

30 déc. 2011, 14:28

hum gérer les session avec SQLITE ?
tu peux regarder ce post de Stealth35 sur le sujet :)

(a mon avis le plus simple nan ?).

@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 4 Messages

30 déc. 2011, 15:09

C’est intéressant malheureusement je dois faire avec une bonne vielle base MySQL déjà en place :) .

Je crois qu'il ne me reste plus qu'a faire un contrôle de session par page alors :(

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

30 déc. 2011, 16:02

heu pourquoi tu ne pourrais pas utiliser sqlite ?
c'est une contrainte (foireuse ?) imposée ?

c'est natif avec php5, c'est juste un fichier "en plus" sur ton espace disque. et la pour le coup un "simple" delete peux régler ton problème :)

@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 4 Messages

30 déc. 2011, 16:14

En fait le logiciel que je développe est un greffon pour glpi qui, dans l'entreprise de mon client, a pour base MySQL.

De plus une grosse quantités de données tourne sur cette base que SQL lite (plus rapide et léger, mais en conséquent plus modeste) ne pourrais pas gérer.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

30 déc. 2011, 16:45

en fait le but n'est pas de déporté la DB cliente vers SQLITE juste les sessions.

en claire php va utiliser une base sqlite (que tu devrais pouvoir aussi utiliser, par exemple avec PDO) pour stocker les sessions plutôt que des fichiers dans le répertoire temporaire du serveur. Et donc en aucun cas tu n'aura a migrer les données existantes vers sqlite (et comme tu l'indique ce ne serait pas forcément une bonne idée).

ceci dit tu peux très bien te créer ton systeme de session perso via MySQL (ou autre ^^). ça commence par ici ;)

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 171 Messages

03 janv. 2012, 07:02

Évidemment il y a des astuces bricoles du style "mettre a 1 une valeur disconnectAll" en base et faire la vérif à chaque chargement de page pour supprimer la session de l'utilisateur courant" mais ce n'est ni propre ni optimisé, et je pense qu'il y a plus simple.
Pourquoi forcement en base ? Pourquoi ne pas créer un fichier par exemple disconnectAll.txt lorsqu'on veut que tout le monde soit déconnecter et simplement tester son existence à chaque fois ? Je pense que c'est plus optimisé déjà du fait que ça allège ta DB si il y a beaucoup d'utilisateurs.
Le bon jugement s'apprend par l'expérience qui s'acquiert en partie par le mauvais jugement.

ViPHP
xTG
ViPHP | 7331 Messages

03 janv. 2012, 09:00

Sauf que tu perds l'attrait des sessions qui peuvent être gérées sans souci grâce à quelques fonctions en bdd. :)
Avec un fichier txt il faudrait recoder toi même tout le système fourni de base par PHP.

ViPHP
ViPHP | 2577 Messages

03 janv. 2012, 09:59

Je verrais bien une date stockée lors de l'identification (début de la session ?) et comparer cette date avec une date stockée en base. Il reste à contrôler si cette date de début de session est inférieure à la date de reset à chaque début de traitement pour reinitialiser $_SESSION.

Eléphant du PHP | 171 Messages

03 janv. 2012, 14:52

Sauf que tu perds l'attrait des sessions qui peuvent être gérées sans souci grâce à quelques fonctions en bdd. :)
Avec un fichier txt il faudrait recoder toi même tout le système fourni de base par PHP.
Je ne vois pas ce que tu veux dire. Par ce fichier j'entendais simplement un
if(file_exists('discoAll.txt'))
    unset($_SESSION['connected']);
Est ce ça que tu avais compris ?
Le bon jugement s'apprend par l'expérience qui s'acquiert en partie par le mauvais jugement.

ViPHP
xTG
ViPHP | 7331 Messages

03 janv. 2012, 15:26

Il manque encore le "comment je vais définir que toutes les sessions ont bien étées purgées ?" en fait avec ton système, c'est ça que je voulais mettre en évidence.
Une session est généralement valable une heure (ne parlons pas des serveurs configurés par des *ù:!$^*ù*=).
Donc à moins de créer le fichier, puis de revenir une heure plus tard pour enfin commencer à travailler tout en étant sûr que les utilisateurs ont bien été déconnectés...

Mais en effet à l'origine je ne pensais pas à cela en voyant ton post.
Je pensais que tu stockais dans ton fichier tous les id de session à dégager, et là faut coder ça.

ViPHP
ViPHP | 5462 Messages

03 janv. 2012, 16:53

supprimes les fichiers de session du serveur
$sessions = glob(sys_get_temp_dir().'/sess_*');
array_map('unlink', $sessions);