Eviter deux sessions en même temps

lecroquant
Invité n'ayant pas de compte PHPfrance

10 avr. 2009, 14:34

Bonjour

Dans un site j'ai créé un zone administrateur protégé par une session et accessible a plusieurs administrteurs.
Je me demande comment faire pour éviter que deux administrateurs soient en train de modifier le site même temps.
Existe t'il un moyen pour un administrateur qui veut se connecter de savoir si il y a déja un administrateur qui a ouvert une session ?

Merci de votre aide
Mathieu

ViPHP
ViPHP | 1136 Messages

10 avr. 2009, 14:47

Salut ,

Perso , j'utiliserai le principe du Mutex .

Un jeton , qui n'a que deux valeurs 0 et 1 ... lorsqu'un utilisateur prend le jeton , personne d'autre que l'utilisateur courant ne peut accéder à la ressource partagé concerné .

Dés que l'utilisateur courant a terminé ou qu'un timeout se déclanche , il rend le jeton , un autre utilisateur peut alors acceder à la ressource ..

Ch.

lecroquant
Invité n'ayant pas de compte PHPfrance

10 avr. 2009, 15:25

Merci Ch

Suis allez voir ce qu'est mutex...
ça a l'air un peu trop complexe pour moi :-(

Je vais plutôt partager l'administration en plusieurs zones


Mathieu

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

10 avr. 2009, 15:55

C'est le principe surtout qui est intéressant... la réalisation peut facilement s'adapter.

Supposons par exemple qu'un administrateur s'authentifie sur ton site. Tout ce dont tu as besoin c'est de créer un fichier (même vide) ou mettre à jour un champ dans une base de données, pour dire qu'il est connecté. Lorsqu'il se déconnecte, tu supprimes ton fichier, ou ta valeur en base, ou autre...

Lorsqu'un autre administrateur tente de se connecter, tu regardes si le fichier existe, ou s'il y a une valeur en base, .. et si c'est le cas, tu lui dis d'aller prendre un café en attendant que l'autre ait libéré la place :)

Ce que je te recommande, dans la mesure où il peut être assez difficile de détecter la fin d'une session (parce que y a des gens biens qui se déconnectent proprement, mais d'autres beaucoup moins qui ferment simplement la fenêtre ou laissent s'écouler le timeout), c'est de stocker l'heure quand ton administrateur fait quelque chose.
Ainsi quand un nouvel admin se pointe, si jamais tu trouves ton enregistrement en base, mais que celui-ci date de plus d'une heure, tu peux considérer que l'autre admin s'est endormit, et l'autoriser malgré tout à entrer. Ca permet d'éviter certains bloquages :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

lecroquant
Invité n'ayant pas de compte PHPfrance

10 avr. 2009, 16:31

Mais oui :-) il faudrait donc qu'a la connexion d'un administrateur je place l'heure dans un fichier et qu'a chaque action de sa part je modifie l'heure.
ainsi si l'heure actuelle depasse les 24 minutes (qui est le timeout de mes sessions) c'est que l'administrateur précedent n'est plus la !!! génial!!
Merci, je vais essayer ça
Mathieu