Empecher 2 utilisateurs en même temps sur la même session

Eléphanteau du PHP | 27 Messages

12 févr. 2008, 00:59

Bonjour,

Je cherche à sécuriser un peu plus mon espace membre, non seulement des méchants crackers, mais surtout pour empêcher mes membres de faire n'importe quoi : en effet dans l'espace membre que je propose, mes adhérents peuvent d'une part tirer profit de se mettre à plusieurs sur le même compte (espace membre payant), et d'autre part s'il se connectent à plusieurs ce sera vite le bordel, car les gestions d'infos ne seront pas coordonnées.

J'ai cherché sur le forum mais ce que j'ai trouvé ne me convient pas.

En fait je souhaiterai que pour un compte "test" si un utilisateur A est connecté, l'utilisateur B qui tente de se connecter reçoive un message d'erreur adéquat.

Donc j'ai pensé faire ainsi: passer un champ "connecté" à "1" dans l'enregistrement MYSQL du membre lorsqu'il se connecte.

Mais voila mon souci: si l'utilisateur A ne se déconnecte pas en cliquant sur "se déconnecter" (qui est censé repasser le champ "connecté" à 0), ce dernier champ restera à 1 dans la base, et A ne pourra pas se reconnecter.

Avez vous une idée pour contourner çà?

Merci beaucoup pour votre aide.
alllezzzzz repondez!!!!! ;)

d0m
Mammouth du PHP | 1141 Messages

12 févr. 2008, 09:43

Çà avait déjà été évoqué sur ce forum et il me semble qu'une solution était de mettre en plus d'un champ 1/0 une date avec heures.

Ensuite tu fixes un temps limite genre 10 min.
Pour le test, il faut alors tester sir le drapeau est à 0 (déconnexion effectuée) OU si le temps limite est écoulé.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

12 févr. 2008, 09:48

Dans l'idée, dOm à raison, mais il manque une petite précision.

Le champs de type date doit contenir la dernière visite de l'utilisateur. Autrement dit, dès qu'un utilisateur connecté affiche une page, tu doit modifier ce champ pour que le delta de 10mn corresponde à un temps d'inactivité avant déconnexion ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphanteau du PHP | 27 Messages

12 févr. 2008, 11:50

Salut,

C'est bien ce que je pensais, faire avec un delta, mais cette idée ne me convient pas.

Parce que mes membres sont pour la plupart des professionnels mais pas du monde informatique...

Donc s'ils ferment par mégarde leur fenêtre, et qu'ils essaient de se reconnecter dans les 10 minutes, çà ne marchera pas, ils obtiendront le message d'erreur, et ils seront pas contents...

Sinon j'avais pensé tout simplement : si A est connecté, et que B se connecte, B devient connecté et A est viré, je sais c'est pas très beau, mais au moins çà m'assure qu'un seul compte est connecté à la fois, et si le cas se présente, il suffit que A fasse un changement de mot de passe indiqué par le message d'erreur.

Qu'en pensez vous?
alllezzzzz repondez!!!!! ;)

Mammouth du PHP | 684 Messages

12 févr. 2008, 11:55

Salut.
Dans ton histoire, si je suis A, je suis déconnecté par B. Dans ce cas, je me reconnecte et B est viré.
B se reconnecte et de nouveau je suis déconnecté ?
Dans ce cas, je change le mot de passe et je suis tranquille ?
Es-tu sur que deux utilisateurs peuvent avoir le même compte ?
Zigz4g

d0m
Mammouth du PHP | 1141 Messages

12 févr. 2008, 11:56

en temps qu'utilisateur, j'apprécierai encore moins de me faire virer parce que l'autre utilisateur est là, ça fait encore moins professionel...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

12 févr. 2008, 12:09

Mais s'il ferme son navigateur, le cookie n'est pas supprimé et il sera toujours connecté ;)

Un membre n'aura pas le droit de se connecter lorsque quelqu'un se sera connecté avec le même compte sur un autre poste il y a moins de 10mn.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 684 Messages

12 févr. 2008, 12:12

Mais s'il ferme son navigateur, le cookie n'est pas supprimé et il sera toujours connecté ;)

Un membre n'aura pas le droit de se connecter lorsque quelqu'un se sera connecté avec le même compte sur un autre poste il y a moins de 10mn.
Comment corrompre le système :)
Zigz4g

Eléphanteau du PHP | 27 Messages

12 févr. 2008, 12:26

En fait je crée un service pour les agents immobilier, donc faut bien se dire que pour eux les sessions c'est du chinois Lol.

Je sais l'idée de la déconnexion est pas terrible, j'essaie de trouver la meilleure solution...

Mais je me dis que quelqu'un qui n'y connait rien et n'est pas habitué au web fonctionne ainsi:

S'il se trouve dans l'espace membre et qu'il ferme sa fenêtre, il va alors tenter de se reconnecter par le formulaire de login, et si c'est dans le laps des 10 min, il se verra alors refuser la connexion, juste?

Et si je cherche à empêcher deux connexions en même temps, c'est pour pas que deux agents se servent du même compte dans la même agence ;)

a+ et merci
alllezzzzz repondez!!!!! ;)

Mammouth du PHP | 684 Messages

12 févr. 2008, 12:30

Pourquoi ne pas simplifier en donnant un login / mot de passe par personne ?
Ils sont si neuneux pour ne pas se rappeler de leur propre compte ?
Ca t'enlève le problème des connexions concurrentielles.
Zigz4g

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

12 févr. 2008, 12:40

Et si tu bloquait l'accès à la page de login s'il est déjà connecté ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphanteau du PHP | 27 Messages

12 févr. 2008, 12:43

Ben je veux pas donner cette possibilité car l'abonnement est nominatif, donc si quelqu'un d'autre veux se connecter au service, il doit payer un abonnement, donc c'est en quelque sorte pour "déranger" ceux qui essaie que je fais souhaite implémenter ça.

Comment ils font par exemple les fournisseurs d'accès internet, ils utilisent un delta?

Oui Zeus, ça pourrait être une solution de vérifier sur la page de login si la session existe encore de rediriger vers l'accueil membre, mais si l'utilisateur a fermé son navigateur, la session n'existe plus? donc c le même souci..
alllezzzzz repondez!!!!! ;)

ViPHP
AB
ViPHP | 5818 Messages

12 févr. 2008, 13:02

J'apprécierais pas non plus de me faire virer par un autre membre autorisé pendant que je suis entrain de faire une mise à jour... Logiquement c'est au dernier venu d'attendre sont tour.

A part ça tu devrais pourvoir, sans trop de problème, convaincre tes clients que le fait de fermer le navigateur, ferme naturellement leur session. Sinon c'est une faille de sécurité. Et puis s'il ferment par mégarde leur fenêtre ils seront bon pour nouvelle authentification, rien de bien grave.

C'est une mauvaise manip de leur part (qu'ils apprendront bien vite à maitriser), et non pas un manque de convivialité de ton programme.

Dis leur la réalité : Pour vous éviter, en tant qu'administrateur, de faire attention à ce que vous faites, je peux créer une faille de sécurité...

ViPHP
ViPHP | 2144 Messages

12 févr. 2008, 13:08

[Mode procédurié On ]Et bon, puisque que c'est une application commerciale, n'oublie pas de logger le profil qui est utiliser plusieurs fois de manière illicite, histoire de pouvoir prendre les mesures qui s'impose.
[Mode procédurié OFF]

Eléphanteau du PHP | 27 Messages

12 févr. 2008, 13:55

L'idée me plait iclo!

Au lieu de faire une restriction à la connexion, je pense faire un mail automatique à l'admin lorsque un compte se connecte deux fois en même temps, comme ça il y aurait envoi d'un mail de prévention à propos de la sécurité et d'avertissement de blocage du compte si cela continue.

C'est pas plus simple?
alllezzzzz repondez!!!!! ;)