Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/03/2007, 23h18   #1
Invité de passage
 
Inscription : 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 : 0
Points : 0
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.
RoyBatty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2007, 00h23   #2
Rédacteur/Modérateur
 
Avatar de N1bus
 
Inscription : janvier 2003
Messages : 2 018
Détails du profil
Informations personnelles :
Âge : 47
Localisation : France, Charente Maritime (Poitou Charente)

Informations forums :
Inscription : janvier 2003
Messages : 2 018
Points : 1 992
Points : 1 992
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.
N1bus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2007, 01h16   #3
Invité de passage
 
Inscription : 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 : 0
Points : 0
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.
RoyBatty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2007, 08h27   #4
Rédacteur/Modérateur
 
Avatar de N1bus
 
Inscription : janvier 2003
Messages : 2 018
Détails du profil
Informations personnelles :
Âge : 47
Localisation : France, Charente Maritime (Poitou Charente)

Informations forums :
Inscription : janvier 2003
Messages : 2 018
Points : 1 992
Points : 1 992
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.
N1bus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2007, 12h28   #5
Invité de passage
 
Inscription : 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 : 0
Points : 0
Mais y a moyen de supprimer un doc de la table au moment ou l'utilisateur ferme son navigateur?
RoyBatty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2007, 12h59   #6
Rédacteur/Modérateur
 
Avatar de N1bus
 
Inscription : janvier 2003
Messages : 2 018
Détails du profil
Informations personnelles :
Âge : 47
Localisation : France, Charente Maritime (Poitou Charente)

Informations forums :
Inscription : janvier 2003
Messages : 2 018
Points : 1 992
Points : 1 992
sur un onclose() dans le body

Faudrait essayer sur un script trés simple pour voir.
Tu trouveras peut etre mieux en le faisant
N1bus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2007, 13h34   #7
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
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
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2007, 18h37   #8
Invité de passage
 
Inscription : 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 : 0
Points : 0
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.
RoyBatty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2007, 18h55   #9
Membre chevronné
 
Inscription : mai 2005
Messages : 657
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 657
Points : 722
Points : 722
Salut

Citation:
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
Taum est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2007, 22h31   #10
Membre régulier
 
Inscription : janvier 2007
Messages : 85
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 85
Points : 80
Points : 80
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 )

@++
__________________
"Soyez les changements que vous aimeriez voir dans le monde" Mahatma Gandhi
p.legal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2007, 20h41   #11
Invité de passage
 
Inscription : 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 : 0
Points : 0
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.

Citation:
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.

Citation:
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.
RoyBatty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2007, 21h28   #12
Membre chevronné
 
Inscription : mai 2005
Messages : 657
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 657
Points : 722
Points : 722
Salut,

Citation:
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.

Citation:
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.
Taum est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h29.


 
 
 
 
Partenaires

Hébergement Web