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 :

Limiter l'accès à 1 seul utilisateur à la fois


Sujet :

Langage PHP

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2007
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Limiter l'accès à 1 seul utilisateur à la fois
    Bonsoir,

    Voila je développe un site en php/mysql avec un système de fiches clients, permettant de générer des lettres personnalisées pour chaque client.
    Bref, j'aimerais limiter l'accès à une page de mon site (une fiche client) à un seul utilisateur à la fois mais je vois pas trop comment faire pour détecter que quelqu'un est déjà entrain d'y accèder.

    Je suis un peu perdu, alors si quelqu'un à une piste qui pourrai me faire avancer ce serait sympa.

  2. #2
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Points : 5 673
    Points
    5 673
    Par défaut
    Bonsoir,

    Eventuellement tu pourrais faire une table documents_en_ligne avec un champ id_du_document

    Quand un utilisateur ouvre le doc, tu vérifies qu'il n'est pas dans la table, sinon tu l'insères. (en mettant à jour l'affichage pour mettre à jour la liste des docs disponibles)

    Quand le doc est fermé, tu supprimes de la table et il est à nouveau dispo.

    Pour vérifier que l'user l'a fermé :
    - Quand sa session est close (il a quitté le site)
    - Quand il ouvre un nouveau doc (tu libères l'autre avant)
    - Un bouton "fermer le doc"


    Bon, c'est une idée, hein.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2007
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci, oui c'est une bonne idée.

    Enfait je suis obligé de passer par la base de données, y a pas moyen de transferer directement des données entre 2 machines par des variables par exemple? (je sais pas si je suis très clair là) Genre une super globale accessible par tout les utilisateurs.

  4. #4
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Points : 5 673
    Points
    5 673
    Par défaut
    Ben une super global entre plusieurs machines , je ne crois pas que ce soit possible. ni une super session ...

    Le plus simple, ce serait la table. (accessible par tous en meme temps)

    Si dans ta liste des docs tu marques les docs utilisés (icone ou css), les autres utilisateurs ne peuvent pas cliquer dessus.

    Par contre, il faudrait pouvoir vérifier la diponibilité des docs toutes les x secondes (la liste des docs dans un iframe avec un refresh de x secondes + requete dans la table) sinon les autres users vont croire à une panne ou à l'indisponibilité permanente des docs.

    Tu devrais pouvoir faire un truc sympa en partant dans cette direction.

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2007
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Mais y a moyen de supprimer un doc de la table au moment ou l'utilisateur ferme son navigateur?

  6. #6
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Points : 5 673
    Points
    5 673
    Par défaut
    sur un onclose() dans le body

    Faudrait essayer sur un script trés simple pour voir.
    Tu trouveras peut etre mieux en le faisant

  7. #7
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 354
    Points : 15 700
    Points
    15 700
    Par défaut
    quand on utilises du Javascript il ne faut pas oublier à gérer le cas où le Javascript ne fonctionne pas
    ça peut venir de plein de raison :
    - Javascript désactivé par défaut dans le navigateur
    - Javascript désactivé par un utilisateur qui essaye de pirater le système
    - plantage de la machine ou de la connexion internet

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2007
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Je vais essayer avec votre solution, merci.

    Je me demandais comment ça fonctionnais par exemple dans un forum en php pour pas que le même utilisateur se connecte simultanément sur 2 machines différentes.

  9. #9
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 657
    Points : 910
    Points
    910
    Par défaut
    Salut

    Je me demandais comment ça fonctionnais par exemple dans un forum en php pour pas que le même utilisateur se connecte simultanément sur 2 machines différentes.
    Tu as un exemple de forum qui propose ça ? Tout les forums que je connais ne font pas de vérifications et on peut tout à fait se connecter sur 2 machines différentes en même temps avec un seul login.

    Ton problème n'est pas évident car HTTP ne garde pas une connexion permanente avec l'utilisateur. Le principe c'est requête -> réponse uniquement.

    Tu peux effectivement utiliser javascript pour envoyer une requête au serveur qd l'utilisateur ferme sa fenêtre, mais pense au cas où l'ordinateur plante, la connexion est interrompue, etc... J'imagine que si tu as un document qui reste ouvert est que plus personne ne peut prendre la main dessus ça va être assez embetant.

    Une autre solution pourrait être d'utiliser AJAX pour envoyer périodiquement une requête au serveur qui dise "J'utilise le fichier machin", par exemple toute les minutes. Si au bout de 2 minutes aucune requête n'a été envoyé, soit le navigateur a été quitté brutalement soit la connexion a été coupée.

    Evidement ces 2 solutions nécessitent Javascript activé chez le client

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 82
    Points : 87
    Points
    87
    Par défaut
    Je pense à une solution plutôt simple.
    tu gère les sessions en base Mysql et tu libère les pages qui sont occupée depuis une durée supèrieure à la durée de tes sessions.

    Pour cela, il suffit d'un petit script qui nettoie la table à chaque demande d'une page par un utilisateur.

    Mais entre nous, je vois pas la raison qui te pousse à rendre certaines pages innacessibles lorsque un utilisateur est connecté. ( Ok la curiosité est un vilain defaut )

    @++

  11. #11
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2007
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Finallement j'ai utilisé une table ou j'enregistre les documents ouverts et je les supprime sur un onUnload en Ajax, ou quand l'utilisateur quitte cette partie du site.
    Comme c'est pour un intranet je suis sûr que le javascript sera actif.

    Une autre solution pourrait être d'utiliser AJAX pour envoyer périodiquement une requête au serveur qui dise "J'utilise le fichier machin", par exemple toute les minutes. Si au bout de 2 minutes aucune requête n'a été envoyé, soit le navigateur a été quitté brutalement soit la connexion a été coupée.
    Par quel moyen je peux nettoyer la table si aucune requête n'est envoyée? je vois pas comment faire.

    Mais entre nous, je vois pas la raison qui te pousse à rendre certaines pages innacessibles lorsque un utilisateur est connecté.
    C'est simplement pour éviter que 2 personnes commencent à modifier un même document en même temps et que l'un d'eux écrase ce que vient d'enregistrer l'autre. Peut être qu'il y a une autre solution plus simple à laquelle je n'ai pas pensé.

    Merci pour tous vos conseils.

  12. #12
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 657
    Points : 910
    Points
    910
    Par défaut
    Salut,

    Par quel moyen je peux nettoyer la table si aucune requête n'est envoyée? je vois pas comment faire.
    Ca peut être tout simplement quand tu listes tout les documents, tu considères un document comme disponible si NOW() > date + 2minutes.

    C'est simplement pour éviter que 2 personnes commencent à modifier un même document en même temps et que l'un d'eux écrase ce que vient d'enregistrer l'autre. Peut être qu'il y a une autre solution plus simple à laquelle je n'ai pas pensé.
    Une solution peut-être de fusionner les deux documents, il faut voir si c'est possible dans ton cas. Il me semble qu'il y a des bibliothèques dans PEAR qui sont capable de déterminer le diff de deux documents.

Discussions similaires

  1. Limiter un applet à une seule instance à la fois
    Par hassanJava dans le forum Applets
    Réponses: 0
    Dernier message: 20/04/2012, 12h35
  2. Réponses: 4
    Dernier message: 16/10/2008, 17h36
  3. Réponses: 1
    Dernier message: 16/10/2008, 15h17
  4. [AIX] Limiter l'accés à un seul répertoire
    Par kei-kun dans le forum AIX
    Réponses: 5
    Dernier message: 21/03/2007, 14h29
  5. Réponses: 3
    Dernier message: 02/12/2006, 11h51

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