IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Empêcher une connexion si celle-ci existe


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 124
    Points : 310
    Points
    310
    Par défaut Empêcher une connexion si celle-ci existe
    Bonjour,
    Je cherche à mettre en place un système qui empêche la connexion à un espace membre si celui-ci est déjà connecté.
    J'avais en tete d'enregistrer en bdd la connexion et la supprimer en cas de déconnexion.
    Le problème est comment déclencher le script dans le cas ou le membre ferme directement la fenêtre ?

    Une idée svp

    PS: Je parle d'une connexion via un autre ordinateur.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu peux enregistrer la date/heure à chaque fois que l'utilisateur accède à une page.
    Si la dernière action est plus vieille qu'un temps que tu choisis, tu considères l'utilisateur comme deconnecté, sinon il est toujours connecté.

    Attention cela signifie aussi que si l'utilisateur ferme la fenêtre, il ne pourra pas se reconnecter avant l'expiration du temps.
    Tu peux placer un événement javascript qui déclenche la déconnexion lors de la fermeture, ainsi seuls les navigateurs sans javascript seront pénalisés.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 124
    Points : 310
    Points
    310
    Par défaut
    Merci Sabotage,

    Je pourrai peut etre avoir juste un champs "is_connect" dans ma bdd avec 0 ou 1 puisque le temps de connexion ne peut etre connu à l'avance.
    Pour l’événement javascript au moment de fermer la fenêtre, j'update le champs "is_connect" à 0. Mais est ce sûr à 100% ? Car s'il existe un risque que l'update ne se fasse pas, l'utilisateur ne pourra plus se reconnecter par la suite.

  4. #4
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 352
    Points : 349
    Points
    349
    Par défaut
    Salut.
    ça devrait marcher si ton javascript est bien écrit c'est-à-dire si ton navigateur arrive à savoir que l'utilisateur à fermer la fenêtre.

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    puisque le temps de connexion ne peut etre connu à l'avance.
    Le principe est de dire que si l'utilisateur n'a rien fait sur le site après x minutes, c'est qu'il est deconnecté.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 124
    Points : 310
    Points
    310
    Par défaut
    En fait ce n'est pas le principe que je recherche. Tant que le membre est connecté, meme s'il ne fait rien pendant toute une journée, il faut que ce meme compte ne soit pas accessible via un autre pc/mobile/etc....

    J'avais imaginé également un script qui vérifie la connexion via une tache cron. Le problème c'est que ca va bouffer trop de ressource.
    Existe-t-il un script du coté de mysql qui vérifie si la connexion existe ou non?

    Suis un peu perdu la.

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Comme quoi il vaut mieux décrire precisement ce qu'on veut dés le début

    Il faut alors qu'un appel Ajax signale toutes les x minutes que la page est toujours active au serveur. Et on revient au principe precédent : si le dernier signalement est plus vieux que y minutes, l'utilisateur est consideté deconnecté.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  8. #8
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 124
    Points : 310
    Points
    310
    Par défaut
    Salut Sabotage,

    Je ne comprends pas le principe.... Ou alors je n'ai pas encore été assez précis sur ma recherche.
    Prenons par exemple deezer ou spotify. Si je me connecte à mon compte et que je donne mes accès à quelqu'un d'autre, il ne pourra pas se connecter tant que je le serai. Je recherche exactement cela en php/ajax/mysql.
    J’espère avoir été plus clair

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Du côté de l'utilisateur, un appel ajax est envoyé toutes les x minutes pour que le serveur sache que le site est toujours "ouvert" dans son navigateur.

    Quand une nouvelle connexion est demandée, tu regardes de quand date le dernier signalement pour cet utilisateur :
    - si cela fait plus de x minutes que son navigateur n'a plus donné de nouvelles, on le considère parti et la nouvelle connexion peut avoir lieu
    - si cela fait moins de x minutes, il est toujours connecté et donc la nouvelle connexion est refusée.

    Pour sceller la connexion, tu peux enregistrer dans la base de données un hash entre l'adresse ip, le navigateur, et l'id de session de l'utilisateur quand il se connecte et tu vérifies la validité à chaque fois que l'utilisateur change de page.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Membre averti Avatar de Amélie Ladoque
    Inscrit en
    Novembre 2004
    Messages
    250
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 250
    Points : 309
    Points
    309
    Par défaut
    En principe les sessions servent à ça, non ?

  11. #11
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    La session va mourir si l'utilisateur ne navigue plus sur le site, d'où la mécanique Ajax pour signaler que la page est ouverte sur le client.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  12. #12
    Membre actif
    Avatar de lanonyme
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    229
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 229
    Points : 290
    Points
    290
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Pour sceller la connexion, tu peux enregistrer dans la base de données un hash entre l'adresse ip, le navigateur, et l'id de session de l'utilisateur quand il se connecte et tu vérifies la validité à chaque fois que l'utilisateur change de page.
    Bonsoir,
    .
    Je pense que l'idée est la, je rajouterai qu'à la connexion sur un autre poste, tu créer le nouveau hash que tu vérifie avec celui dans ta base de données.
    Et pour éviter de bloquer l'utilisateur, tu indique un message "Utilisateur déjà connecté" et quand il appuie à nouveau sur le bouton de connexion, cela force la connexion et remplace le hash stocké (et du coup, celui qui était resté connecté, sera déco au moment ou il effectuera une action).

    Cordialement.

    lanonyme

Discussions similaires

  1. Savoir si une connexion existe entre un signal et une procédure
    Par troumad dans le forum GTK+ avec C & C++
    Réponses: 10
    Dernier message: 29/08/2011, 23h25
  2. Réponses: 1
    Dernier message: 05/11/2009, 14h28
  3. tester l'existance d'une connexion
    Par rems67 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 17/10/2007, 20h49
  4. [SQL Server 2000][W2000] Empêcher une connexion
    Par Débéa dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 01/02/2006, 11h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo