Forum Clubic

Détection de la connexion d'un utilisateur en PHP - Comment faire...?

Bonjour,
Sur mon site Intranet, j’ai implémenté une gestion simple des utilisateurs avec droits d’accès etc.
J’ai donc une table “membres” avec id,login,pwd, etc.
J’aimerais trouver une solution fiable pour faire en sorte que lorsqu’un utilisateur est connecté, aucun autre ne puisse utiliser son login/password en même temps, et ce pour éviter évidemment des incohérences dans la base de données.
Je pensais rajouter dans la table “membres” un champ connexion (à 1 si connecté).
Ok, mais si la personne ferme son navigateur par exemple, le champ ne se mettra pas à 0 tout seul…
Quelle solution fiable pourrais-je adopter ?
Merci !!

Plutôt : un champ indiquant la date de dernière connexion (remise à jour par la personne connectée), permettant de déconnecter automatiquement la personne si 5 minutes se sont écoulées.

Bonne idée, mais comment calculer les 5 min ??

A chaque fois que qqun se logue tu vérifies si le login a été utilisé durant les 5 dernières minutes (une personne a chargé une page avec ce login il y a moins de 5 minutes).

Et à chaque début de page (dans le header?) tu mets à jour la base de données pour indiquer que la personne a donné signe de vie (en spécifiant la date).

Enfin y’a un problème c’est qu’il n’est pas anormal qu’une personne reste sur une page disons une heure sans la recharger…

passe par les variables des sessions (ou un cookie mais c’est moins bien).

tu mémorises l’heure de connexion, tu la mémorises dans ta var de session et pour voir si la personne est bien connectée, tu regardes si cette var est bien initialisée.

quand la personne ferme sont navigateur la var de session est détruite et l’utilisateur est obligé de se re-logger. (a moins de stoker qqch dans un cookie ou autre bricolage du genre.)

Admettons que j’initialise une variable de session $cnx lorsqu’une personne se connecte avec un login toto.

Une personne se relogge avec ce même login toto, comment puis-je savoir si la variable de session $cnx est déjà initialisée par une autre session ?? C’est possible ?

Je ne pense pas que ce soit possible. Sinon ca devrait s’appeler un faille :D.
Mais peut-être ai-je tort, es-ce-que qqun pourrait affirmer ce que j’ai dit?

Dans ce cas elle se reconnecte? Ou tu peux appliquer la politique du “premier qui arrive, prend tout”. Tu peux par exemple la reconnecter si c’est possible.

J’ai l’impression que je vais m’en sortir en stockant l’IP et l’heure de dernière connexion dans la BDD. Merci !

Bonne idée :slight_smile: et si elle change entre temps :wink:

Tu fais un cookie stockant l’identifiant de connexion sur le post de l’ordinateur, et il permet de se reconnecter au besoin.

Pourquoi l’IP changerait-elle tant que la personne n’arrête pas son PC ?

Non, non. Ca dépend du modem ou du périphérique offrant la connexion. Et sur un réseau local (intranet, hein?) ça va pas trop le faire l’ip :wink:

Désolé mais je ne comprends pas le problème au sujet de l’IP… ?

Non, je me suis trompé. Dans ton cas (ie: empêcher l’utilisateur de se connecter deux fois) c’est ce qu’il faut faire.

chaque session est unique !! et il y a une session par utilisateur !!

je vois pas ou est le problème … si ce n’est que vous ne devez pas lire attentivement les explications du super site www.php.net hum hum

D’après moi le problème c’est les personnes derière un proxy. Je me trompe ou c’est le proxy qui fait les requêtes à la place du client? Donc deux personnes qui surferont depuis la même boîte (je crois que toutes les grandes sociétés qui se valent ont un proxy) auront la même depuis ton site!

C’est la seul chose qui semble poser un vrai porblème avec le stockage des IPs…

Par contre les cookies me paraissent beaucoup plus intéréssants.

C’est vrai que les sessions marchent aussi :paf:

En intranet, chaque ordinateur a une IP spécifique. Donc à priori pas de problèmes pour bloquer l’ip. Quant aux sessions, ça dépend de l’implantation et du serveur, et surtout ça peut être une solution plus lourde :slight_smile:

Et surtout je ne pense pas que ça lui permette de régler le cas "pas deux fois le même utilisateur".