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

Langage PHP Discussion :

controler la connexion a mon application [PHP 5.0]


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 111
    Points : 58
    Points
    58
    Par défaut controler la connexion a mon application
    salut a tous ,
    je travail sur un application de gestion de courier en ligne. pour l'acces j'ai cree un table USERS dans Mysql ou est stocke les login et password des differents utilisateurs. j'ai eglament utilise les variables sessions pour les connexions , donc je recupere les loggin et password dans des variables session apres chaque session.
    mon probleme est le suivant: jusqu'ici plusieurs utilisateurs peuvent se connecter avec le mm compte. comment je peux remedier a ça ?? du genre avant chaque connexion , le systeme s'assure d'abord que le compte n'est pas deja utilise par une autre personne... est ce que quelqun a un script qlque part qui peut m'aider ??
    merci a vous ....

  2. #2
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 477
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 477
    Points : 4 688
    Points
    4 688
    Par défaut
    Salut,

    pourquoi ne pas ajouter dans ta table users, un champ 'derniere activitee', un champ 'online' (et un champ ip)

    s'il ne n'a pas clique sur un lien 'log out' et si la derniere activitee date de plus de 5 min (par exemple) tu consideres qu'il a timeout et tu autorise la connexion sur un autre pc..

  3. #3
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 111
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par Doksuri Voir le message
    Salut,

    pourquoi ne pas ajouter dans ta table users, un champ 'derniere activitee', un champ 'online' (et un champ ip)
    super !!! ton astuce marche. j'ai juste ajoute un champ 'online' dans la table USERS qui prend deux valeurs (0 pour pas en service et 1 pour deja en service, avec 0 comme valeur par defaut).
    a chaque connexion le systeme verifie aussi la valeur du champ 'online' s'il est a 0 il autorise la connexion et met 'online' passe à 1 dans la bd au cas contraire il signale a l'user que le cmpte est en deja service.
    a la deconnexion la valeur de 'online' passe automatiquement a 0.

    voila , merci encore ,,, a bientot

  4. #4
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 477
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 477
    Points : 4 688
    Points
    4 688
    Par défaut
    salut,

    je te deconseille de rester sur ta solution....

    que se passerait-il si l'utilisateur fermait son navigateur sans cliquer sur 'deconnecter' ?
    => il aurait toujours 1 et ne pourrait plus se reconnecter apres...

    c'est pour ca que je t'ai propose le timeout

  5. #5
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 111
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par Doksuri Voir le message
    salut,
    je te deconseille de rester sur ta solution....
    je rencontre justement ce probleme !!! soit quand l'utilisateur ferme le navigateur sans cliquer sur deconnecter soit apres un certains temps d'inactivite... la valeur reste a 1 et on ne peut plus se connecter. et franchemnt je ne m'en sors pas du tout avec les timeout... tu n'aurais pas un script ou un code ????

  6. #6
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 477
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 477
    Points : 4 688
    Points
    4 688
    Par défaut
    Citation Envoyé par cyrilherve Voir le message
    tu n'aurais pas un script ou un code ????
    heu... non...

    mais je peux te mettre sur le chemin.
    au debut de chaque page, tu peux tester ca :
    • si tes variables de session n'existent pas, tu redirige vers la page de connexion
    • si la variable de session de timeout n'existe pas, tu l'initialise avec la valeure de la BDD
    • si la valeure du timeout > "maintenant + X minutes", tu passe la valeur du 'online' a zero; et tu redirige vers la page de connexion
    • si tous les tests ont ete passes, tu mets a jour le timeout dans la BDD

    voila, j'espere ne rien avoir oublie....

  7. #7
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 111
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par Doksuri Voir le message
    Salut,

    pourquoi ne pas ajouter dans ta table users, un champ 'derniere activitee', un champ 'online' (et un champ ip)

    s'il ne n'a pas clique sur un lien 'log out' et si la derniere activitee date de plus de 5 min (par exemple) tu consideres qu'il a timeout et tu autorise la connexion sur un autre pc..
    ok, ok !!! c'est deja pas rien de cconnaitre son chemin... quelque precison encore je t'en prie :

    - si je comprds bien le timeout est une variable session que je declare sur toute les pages ???

    - pour le champ 'derniere activitee' , comment recuperer sa valeur et la mettr automatiquement à jr ds la bd,vu qu'elle est ammené a varie tout le tmps ???

    - autre chose : logiquement qud on ferme le navigateur on doit avoir une destruction automatique des sessions non ou bien ???

    cordialement ...

  8. #8
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 477
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 477
    Points : 4 688
    Points
    4 688
    Par défaut
    salut,

    c'est vrai que si l'on n'a jamais fait ca, ca peut ne pas etre tres evident...

    timeout represente un delai d'innactivitee.
    => tu n'es pas oblige d'appeler ta variable de session de la sorte, mais c'est plus parlant.
    $_SESSION['timeout']=time();


    pour recuperer le champ 'derniere activitee' tu fais une simple requete SQL
    par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $result=mysql_query("SELECT derniere-activitee FROM users WHERE col-pseudo='".$pseudo."' ");
    $row=mysql_fetch_assoc($result);
    $_SESSION['timeout']=$row["derniere-activitee"];
    if(($_SESSION['timeout']+(5 * 60)) > time() )
    {
    ...
    }

    tu mets a jour ce champ (avec UPDATE) a chaque page que l'utilisateur charge


    quand on ferme le navigateur, la session est bien detruite, mais uniquement cote client...
    le serveur ne sait pas que le client a ferme son navigateur. (d'ou la mise en place d'un systeme de timeout)

  9. #9
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 111
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par Doksuri Voir le message
    salut,

    c'est vrai que si l'on n'a jamais fait ca, ca peut ne pas etre tres evident...

    timeout represente un delai d'innactivitee.
    => tu n'es pas oblige d'appeler ta variable de session de la sorte, mais c'est plus parlant.
    $_SESSION['timeout']=time();
    pour recuperer le champ 'derniere activitee' tu fais une simple requete SQL
    par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $result=mysql_query("SELECT derniere-activitee FROM users WHERE col-pseudo='".$pseudo."' ");
    $row=mysql_fetch_assoc($result);
    $_SESSION['timeout']=$row["derniere-activitee"];
    if(($_SESSION['timeout']+(5 * 60)) > time() )
    {
    ...
    }

    tu mets a jour ce champ (avec UPDATE) a chaque page que l'utilisateur charge


    quand on ferme le navigateur, la session est bien detruite, mais uniquement cote client...
    le serveur ne sait pas que le client a ferme son navigateur. (d'ou la mise en place d'un systeme de timeout)
    waoh !!!! ça va faire 3 jours que je suis dessus et toujours rien !!! peut etre qu'il me faut faire un tour sur mars d'abord....
    non mais franchement ,,,, si j'ai bien compris le champ 'derniere activitee' represente le temps ou l'utilisateur a fait sa derniere action sur le systeme, alors ( a part par magie biensur ) comment est ce que je peux recuperer sa valeur et la mettre a jour dans la bd à chaque fois qu'il y a une action sur le systeme ???
    je sais pas : ça vous dirait de faire une bonne action ??? un bon script par exemple ,,, ça sauvera a coup sur qulqun d'un arret cardiaque tout ces gens sur le net qui ont le mme probleme et pas de solution

    merci bien

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    Une méthode un peu plus simple qu'un timeout :

    Lorsqu'un utilisateur se connecte à un compte, un jeton aléatoire (compris entre 1 et 1000 par exemple) est généré, passé en session et enregistré en DB. Ce jeton est comparé à chaque page visitée par l'utilisateur. Si le jeton est faux, l'utilisateur est éjecté et le jeton est remis à 0 dans la DB.

    Ce qui donne le scénario suivant en cas de connexion multiple :

    A se connecte sur le compte "toto" -> un jeton est généré.
    A surfe, tout va bien.
    B se connecte sur le compte "toto" -> un nouveau jeton est généré.
    B surfe, tout va bien.
    A surfe, mais son jeton n'est plus valide. A est éjecté, le jeton du compte "toto" est remis à 0
    B surfe, son jeton n'est plus valide non plus. B est éjecté et le jeton du compte "toto" est remis à 0 (il y était déjà mais on s'en fout)

    Bref, les deux utilisateurs ont été éjectés vu que tu n'as aucun moyen de savoir lequel des deux était le propriétaire légitime du compte "toto".

    C'est un peu plus simple qu'un timeout et nécessite pas de réécrire dans la base à tout bout de champ.

  11. #11
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 111
    Points : 58
    Points
    58
    Par défaut
    resalut à vous ,
    de retour avec une solution a mon probleme grace a (ajax et javascript surtout)

    merci a vous.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/06/2011, 08h53
  2. Est-ce que ZF va supporter 500 connexions sur mon application ?
    Par whitespirit dans le forum Zend Framework
    Réponses: 17
    Dernier message: 04/06/2008, 15h55
  3. Un nouveau controller dans mon application
    Par yosraisi dans le forum MVC
    Réponses: 5
    Dernier message: 17/04/2008, 20h07
  4. erreur de connexion à mon application
    Par paolo2002 dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 14/03/2008, 16h27
  5. Réponses: 1
    Dernier message: 03/11/2006, 18h01

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