Php+js comment limiter 1 session par login
oscarapace
Messages postés
58
Statut
Membre
-
Nabla's Messages postés 20731 Statut Contributeur -
Nabla's Messages postés 20731 Statut Contributeur -
Bonjour,
Je voudrais limiter l'utilisation d'un compte sur un site. Cad que 1 seule personne puisse utiliser le même login au même moment.
La première solution consiste à utiliser l'adresse IP, seulement plusieurs personnes différentes peuvent avoir la même IP (réseau entreprise par exemple, proxy commun, etc.). Donc ce n'est pas suffisant.
Mon problème est que si j'interdis le login si ce login a déjà une session ouverte ça peut bloquer : si l'utilisateur a quitté le site sans faire de "log out", on croit qu'il est toujours connecté, au moins pendant la durée de validité de la session (par ex 30 minutes). Dans ce cas si il a fermé son navigateur sans faire de log out et retente de se connecter, il sera bloqué pendant un temps trop long.
Je crois qu'en JS on peut détecter la fermeture de la fenetre : faire un log out si l'utilisateur ferme le navigateur. Mais d'après mes souvenirs ce n'est pas très fiable.
La seule solution que j'entrevois est d'utiliser ajax pour signaler toutes les X secondes que la session est ouverte. Dans ce cas si l'utilisateur quitte le site sans faire de log out, on aura plus le signal par ajax donc on ferme la session.
Quelqu'un a de l'expérience ou une idée sur ce sujet ?
Merci !
Je voudrais limiter l'utilisation d'un compte sur un site. Cad que 1 seule personne puisse utiliser le même login au même moment.
La première solution consiste à utiliser l'adresse IP, seulement plusieurs personnes différentes peuvent avoir la même IP (réseau entreprise par exemple, proxy commun, etc.). Donc ce n'est pas suffisant.
Mon problème est que si j'interdis le login si ce login a déjà une session ouverte ça peut bloquer : si l'utilisateur a quitté le site sans faire de "log out", on croit qu'il est toujours connecté, au moins pendant la durée de validité de la session (par ex 30 minutes). Dans ce cas si il a fermé son navigateur sans faire de log out et retente de se connecter, il sera bloqué pendant un temps trop long.
Je crois qu'en JS on peut détecter la fermeture de la fenetre : faire un log out si l'utilisateur ferme le navigateur. Mais d'après mes souvenirs ce n'est pas très fiable.
La seule solution que j'entrevois est d'utiliser ajax pour signaler toutes les X secondes que la session est ouverte. Dans ce cas si l'utilisateur quitte le site sans faire de log out, on aura plus le signal par ajax donc on ferme la session.
Quelqu'un a de l'expérience ou une idée sur ce sujet ?
Merci !
A voir également:
- Php+js comment limiter 1 session par login
- Net limiter - Télécharger - Outils Internet
- My.canalbox.africa/login - Forum Box et Streaming vidéo
- On me demande mon login - Forum Windows
- Easy php - Télécharger - Divers Web & Internet
- Portail mpsa login ✓ - Forum Réseau
3 réponses
j'ai une vague idée, avec ta solution ajax (ou lors du chargement d'une nouvelle page)
lorsque l'utilisateur se log, sa session va créer une valeur aléatoire (random) qui sera stockée dans $_SESSION['unique_login'], et dans la base de données. La base de données contiendra les dernieres valeurs de cette variable
lors du chargement d'une nouvelle page, on vérifie que le unique_login soit bien le dernier crée.. si c'est pas le cas, tu supprime la session et affiches un message "vous vous etes conencté depuis un autre ordinateur"
lorsque l'utilisateur se log, sa session va créer une valeur aléatoire (random) qui sera stockée dans $_SESSION['unique_login'], et dans la base de données. La base de données contiendra les dernieres valeurs de cette variable
lors du chargement d'une nouvelle page, on vérifie que le unique_login soit bien le dernier crée.. si c'est pas le cas, tu supprime la session et affiches un message "vous vous etes conencté depuis un autre ordinateur"
je ne vois pas ce que cela change.
exemple :
A se connecte sur le site. il consulte qq pages et ferme son navigateur sans faire de log out.
A réouvre le site et veut se connecter, au pire il a même changé de poste de travail. le uniq_id a changé, donc ça le bloque ???
exemple :
A se connecte sur le site. il consulte qq pages et ferme son navigateur sans faire de log out.
A réouvre le site et veut se connecter, au pire il a même changé de poste de travail. le uniq_id a changé, donc ça le bloque ???
non, mais ca ferme la première session qu'il utilisait , et le laisse uniquer uniquement la 2°
et ca lui met "vous venez de vous conencter depuis un autre poste
sinon, si tu veux empecher une nouvelle conenxion, dans la table "utilisateurs" de ta bdd, tu met un champs dernière activité, que tu met a jour a chaque chargement de page, et genre toutes les 15 secondes grace a ajax
->lors du login, tu vérifie dans la bdd qu'il a pas eu d'activité dans les 15 dernières secondes !
cete solution empèche une nouvelle connexion, l'autre solution permetait de fermer automatiquement les anciennes connexions... 2 philosophies différentes
au choix: message vous etes deja connecté depuis un autre ordi
ou, vous venez de vous connecter sur un autre ordi
pour la bdd, je préconise l'usage d'une table en mémoire (pas enregistrée sur le disk) pour ne pas ralentir le serveur
et ca lui met "vous venez de vous conencter depuis un autre poste
sinon, si tu veux empecher une nouvelle conenxion, dans la table "utilisateurs" de ta bdd, tu met un champs dernière activité, que tu met a jour a chaque chargement de page, et genre toutes les 15 secondes grace a ajax
->lors du login, tu vérifie dans la bdd qu'il a pas eu d'activité dans les 15 dernières secondes !
cete solution empèche une nouvelle connexion, l'autre solution permetait de fermer automatiquement les anciennes connexions... 2 philosophies différentes
au choix: message vous etes deja connecté depuis un autre ordi
ou, vous venez de vous connecter sur un autre ordi
pour la bdd, je préconise l'usage d'une table en mémoire (pas enregistrée sur le disk) pour ne pas ralentir le serveur
oui je pense retenir la solution ajax pour ne pas fermer la première session mais empecher l'ouverture d'une deuxième session, sans bloquer qq'un qui ferme son navigateur et revient (mis à part une attente de 10 secondes du fait du signal ajax).
je crois qu'on peut aussi utiliser json et écrire une balise script js dans le header de façon transparente, ce qui a pour effet de lancer une requete au site sans passer par des fonctions ajax qui ne sont peut etre pas toujours compatibles, en plus ces requetes sont moins visibles.
merci
je crois qu'on peut aussi utiliser json et écrire une balise script js dans le header de façon transparente, ce qui a pour effet de lancer une requete au site sans passer par des fonctions ajax qui ne sont peut etre pas toujours compatibles, en plus ces requetes sont moins visibles.
merci
il suffit de récupèrer jsr_class.js qui ne fait que quelques lignes.
ensuite dans un script il suffit de mettre ces qq lignes pour envoyer une requete :
var req = 'http://url_de_ma_requete'
jsreq = new JSONscriptRequest(req);
jsjreq.buildScriptTag();
jsreq.addScriptTag();
l'avantage est que ca marche sur tous les navigateurs et que la requete peut aller sur un autre domaine, par contre c'est asynchrone et ce n'est pas idéal si on doit récupérer des infos par la requete
ensuite dans un script il suffit de mettre ces qq lignes pour envoyer une requete :
var req = 'http://url_de_ma_requete'
jsreq = new JSONscriptRequest(req);
jsjreq.buildScriptTag();
jsreq.addScriptTag();
l'avantage est que ca marche sur tous les navigateurs et que la requete peut aller sur un autre domaine, par contre c'est asynchrone et ce n'est pas idéal si on doit récupérer des infos par la requete