begin process at 2012 05 27 21:38:00
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Réseau & Internet

 > GÉRER LES PROBLÈMES D'ACCÈS CONCURENTS SUR CERTAINES PAGES OU ZONES D'UN SITE.

GÉRER LES PROBLÈMES D'ACCÈS CONCURENTS SUR CERTAINES PAGES OU ZONES D'UN SITE.


 Information sur la source

Note :
Aucune note
Catégorie :Réseau & Internet Classé sous :accès concurrent, bloquer, simultanément Niveau :Expert Date de création :21/05/2009 Date de mise à jour :25/05/2009 19:27:35 Vu / téléchargé :3 167 / 204

Auteur : sixtyfourwarrior

Ecrire un message privé
Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

 Description

Cette librairie vous permettra, à l'aide d'une seule fonction dont l'utilisation est très simple, de bloquer l'accès à certaines pages ou zones de votre site si un utilisateur s'y trouve déjà.

Cela peut être utile par exemple sur les forums : si un modérateur est en train de modifier un message, il serait pas mal que personne ne puisse le déplacer ou le supprimer entretemps... Ceci est un exemple basique mais on peut en trouver un tas d'autres plus critiques que celui ci.

Je vous laisse jeter un coup d'oeil au fichier "README" à l'intérieur de l'archive pour en apprendre plus sur cette librairie et son utilisation. (README uniquement en anglais pour l'instant, je ferai la version française plus tard.)

Une page d'exemple d'utilisation se trouve dans l'archive, si vous voulez tester ! ;)

Source

  • <?
  • ///////////////////////////
  • // EXEMPLE D'UTILISATION //
  • ///////////////////////////
  • //Very important, without that the library does not work
  • session_start();
  • ?>
  • <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  • <html>
  • <head>
  • <title>Php_locker_lib test page</title>
  • </head>
  • <body>
  • <?php
  • //Call of the library
  • require "lib/php_locker_lib.php";
  • //Create the locker for this page
  • $locker = new php_locker("tester", true);
  • //If the page is accessible, display content
  • if ($locker->is_accessible())
  • echo "Hello world ! <br /><br /> (Vous avez accès à la page.)"; //Il faut mettre votre contenu ici !
  • //If the session has reached the timeout
  • elseif ($locker->is_timeout())
  • echo "Votre session a expirée.";
  • //If javascript is disabled
  • elseif ($locker->js_disabled())
  • echo "Vous devez activer JavaScript pour avoir accès à cette page.";
  • //If the page is locked
  • else
  • echo "Vous entrez dans une zone critique, un seul utilisateur n'y est autorisé à la fois.<br />Vous devez attendre que l'autre utilisateur ait fini ses opérations avant de pouvoir y accéder.";
  • ?>
  • </body>
  • </html>
<?

    ///////////////////////////
    // EXEMPLE D'UTILISATION //
    ///////////////////////////


    //Very important, without that the library does not work
    session_start();

?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
    <head>
        <title>Php_locker_lib test page</title>
    </head>
    <body>

    <?php

        //Call of the library
        require "lib/php_locker_lib.php";

        //Create the locker for this page
        $locker = new php_locker("tester", true);

        //If the page is accessible, display content
        if ($locker->is_accessible())
            echo "Hello world ! <br /><br /> (Vous avez accès à la page.)"; //Il faut mettre votre contenu ici !

        //If the session has reached the timeout
        elseif ($locker->is_timeout())
            echo "Votre session a expirée.";

        //If javascript is disabled
        elseif ($locker->js_disabled())
            echo "Vous devez activer JavaScript pour avoir accès à cette page.";

        //If the page is locked
        else
            echo "Vous entrez dans une zone critique, un seul utilisateur n'y est autorisé à la fois.<br />Vous devez attendre que l'autre utilisateur ait fini ses opérations avant de pouvoir y accéder.";

    ?>

    </body>
</html>

 Conclusion

Il y avait surement 1000 façons de faire cette librairie, je ne sais pas du tout si j'ai utilisé la meilleure, mais tout ce que je sais c'est que ça fonctionne parfaitement dans mon projet au boulot.

Sachez que je suis ouvert à toutes suggestions, critiques, conseils, ou idées d'amélioration !

J'espère que ça vous sera utile !

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

25 mai 2009 19:27:36 :
La librairie se présente maintenant sous forme de classe. Il suffit de créer un objet de la classe php_locker pour n'autoriser l'accès qu'à un seul utilisateur simultanément. Les méthodes de cette classe permettent de savoir si la page est verrouillée ou si la session d'un utilisateur a expiré.

 Sources de la même categorie

INSPECTEUR DE PAGES (VÉRIFIEZ SI DES SITES AFFICHENT UN TEXT... par pablo836
Source avec Zip Source avec une capture GÉOLOCALISATION par pgl10
Source avec Zip TAPI : METTRE EN RELATION DEUX POSTES TELEPHONIQUES par ravery
Source avec Zip CLIENT / SERVEUR : LES SOCKETS par Morphinof
Source avec Zip VALIDATEUR_3WC par lezj

Commentaires et avis

Commentaire de Arto_8000 le 22/05/2009 01:21:58

Voici mes impressions en vrac :

- Ce qui aurait été plus facile à utiliser, c'est d'avoir une classe au lieu d'une fonction.
- Tu mélanges le côte "contrôleur" de ton code avec l'affichage et ça c'est mauvais pour la portabilité.
- Il te manque un global pour ta variable jquery_use ligne 59 de php_locker_lib.php.
- Ton path vers ton fichier jquery est incorrect dans le fichier "page_to_lock.php".
- À part ça le principe n'est pas vraiment super. Tu aurais été mieux de faire quelque chose qui fait carrément une redirection côté serveur si la page est bloqué. Au lieu de ça, tu charges la page quand même et tu fais une requête vers le serveur. Tout aurait pu rester côté serveur.
- En bonus, si je désactive javascript (ce qui est ma configuration par défaut), ça ne fait absolument rien comme blocage.
- Pour le reste, ça manque de portabilité. Tu forces l'utilisation de jquery. Sur une page visiter, 55ko ça peut générer beaucoup de traffic. C'est lourd de forcer l'utilisation d'une librairie javascript. En plus, certaines librairies peuvent avoir des collisions dans les noms qu'ils utilisent.

Commentaire de sixtyfourwarrior le 22/05/2009 13:38:28

Merci de tes commentaires, je prendrai ça en compte pour m'améliorer ! :)

Juste quelques remarques/précisions :

"- Ce qui aurait été plus facile à utiliser, c'est d'avoir une classe au lieu d'une fonction."

Dans la mesure où il y a qu'une fonction, je pense que cela reviendrait au même, non ?

"- À part ça le principe n'est pas vraiment super. Tu aurais été mieux de faire quelque chose qui fait carrément une redirection côté serveur si la page est bloqué. Au lieu de ça, tu charges la page quand même et tu fais une requête vers le serveur. Tout aurait pu rester côté serveur."

En fait, ce n'est pas vraiment le but de la librairie, ce que tu dis peut être fait assez rapidement et simplement en Php.

Ce que je voulais surtout (besoins de l'application au boulot) c'est que la page se débloque quand un utilisateur reste inactif au delà des temps indiqués ou dès qu'il se déconnecte. Je voulais aussi éviter le cas où le réseau serait perdu (pour X raison), que le gars reste sur la page, et puisse envoyer le formulaire une fois reconnecté. Il y a donc forcément quelque chose à gérer côté utilisateur, enfin du moins je ne vois pas d'autres moyens de gérer ça côté serveur...

Cela évite aussi qu'une page reste bloquée trop longtemps alors qu'un utilisateur est parti.

"- En bonus, si je désactive javascript (ce qui est ma configuration par défaut), ça ne fait absolument rien comme blocage."

Ah effectivement je n'y avait pas pensé, l'application au boulot fait ce test en amont, car javascript est nécessaire pour l'utiliser, on ne peux pas y entrer si javascript est désactivé. Il faudra que j'ajoute ce test à ma librairie, merci. ;)

"- Pour le reste, ça manque de portabilité. Tu forces l'utilisation de jquery. Sur une page visiter, 55ko ça peut générer beaucoup de trafic. C'est lourd de forcer l'utilisation d'une librairie javascript. En plus, certaines librairies peuvent avoir des collisions dans les noms qu'ils utilisent."

Je n'ai pas l'habitude de travailler en ajax, j'ai donc provisoirement utilisé jQuery pour faire rapidement et simplement des requêtes m'assurant la compatibilité entre navigateurs. Il faudra que je change ça pour rendre la librairie plus légère effectivement.

Encore une fois merci de tes remarques ! :)

Commentaire de Arto_8000 le 22/05/2009 18:10:10

Pour le blocage côté serveur tu peux quand même gérer toutes les fonctionnalités côté serveur.

Pour la classe, idéalement une syntaxe comme ceci serait plus portable et plus intéressant pour ceux qui voudrait utiliser un système comme ce que tu proposes :

<?php
include("taLibrairie.class.php");

$blocage = new RestrictionPage("lock1");

if (!$blocage->isLock()) {
    // Affichage ici //
    $blocage->lock(30000); // ou encore quelque chose comme
    $blocage->lockTill(strtotime("+1 day"));
} else {
   // Page avec erreur ou redirection //
}
?>

Ainsi, le développeur gère comme il le veut l'affichage et les messages d'erreur. C'est aussi lui qui a la liberté de faire le rafraichissement comme il le veut. À remarquer qu'une simple requête AJAX vers la même page à toutes les 25 secondes suffit pour garder la page barré et si l'utilisateur pert la connexion ou quitte la page, la page sera débloqué après 30 secondes. Tu retrouves ainsi toutes les fonctionnalités que tu avais côté client.

Ce que tu proposes à l'avantage d'être simple à mettre en place, mais on peut difficilement coder autour de cela ou l'intégrer à un script existant.

Commentaire de sixtyfourwarrior le 25/05/2009 19:35:34

Voilà, je viens de mettre en ligne la nouvelle version de la librairie. Je l'ai modifiée en suivant tes conseils et remarques, dont je te remercie encore une fois de m'avoir fait part.

La librairie se présente maintenant sous forme de classe, c'est en effet plus pratique à utiliser pour personnaliser les messages d'erreur ou les actions à réaliser en cas de page verrouillée. J'ai mis un exemple de code plus haut, si tu veux voir ce que ça donne. ;)

J'ai intégré la vérification pour l'activation du JavaScript, ça marche sous Firefox, mais je n'ai pas encore testé pour les autres.

Finalement j'ai mixé les vérifications côté serveur et côté client.

Il ne me reste plus qu'à virer jQuery, et à trouver une solution au problème des onglets des navigateurs qui ont la même session et qui peuvent donc ouvrir deux même pages simultanément...

Merci de m'avoir permis d'améliorer cette librairie, c'est un plaisir de recevoir des conseils de personnes plus expérimentées. :)

Commentaire de Arto_8000 le 25/05/2009 20:19:03

"Il ne me reste plus qu'à [...] trouver une solution au problème des onglets des navigateurs qui ont la même session et qui peuvent donc ouvrir deux même pages simultanément..."

C'est pas vraiment nécessaire d'aller jusque là. De toute façon, c'est le même utilisateur qui ouvre la même page. Le but généralement est de simplement bloquer la page pour 1 utilisateur ce qui est déjà fait.

"J'ai intégré la vérification pour l'activation du JavaScript, ça marche sous Firefox, mais je n'ai pas encore testé pour les autres."

J'ai regardé rapidement la méthode et ça semble être assez classique comme approche, tu ne devrais pas avoir de problème avec les autres navigateurs.

Sinon pour les modifications, c'est beaucoup plus intéressant à utiliser maintenant. C'est sûr que ce n'est jamais parfait, mais au moins ça c'est beaucoup amélioré.

Bonne continuation.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Je veux bloquer le html [ par Azerty ] je fait un petit livre d'or MySQL en se moments mais j'ai un probléme : il faut que je bloque le html (balise style &lt;.br&gt;/&lt;.noscript etc) enf Bloquer fichier .js [ par mathieumg ] Sur ma page j'ai un script qui utilise un fichier .js.Je voudrais que ma page ait les droits d'afficher ce fichier mais si on va à mon adresse /mon_fi Bloquer le clic droit. [ par Jouban ] Bonjour à tous !Je dois réaliser un site dont le but est la consultation de documents.Ma structure est la suivante :3 frames, une en haut pour le menu Bloquer l'accé direct aux pages d'un site réalisé en Frames [ par rem78 ] Bonjour,Je cherche le moyen de pouvoir bloquer l'accès direct de mes pages par un visiteur mal intentionné et avec redirection automatique sur ma page bloquer l'acces du site!!! [ par LaTatadu91 ] salut je voudrais savoir comment faire pr bloquer l'acces a toutes mes pages si la personne n'est pas log&#233;e et si son login n'est pas reconnuquel Bloquer tableux pour forum!!! [ par lolorenzeb ] Salut a tous, Bon voila je pose une question sur ce forum mais je ne sais pas vraiment si la r&#233;ponse sera en PHP. En fait je suis en train bloquer ip d'un membre [ par speedylol ] Bonjour j ai besoisn d'une aide j aimerais creer un script qui bloque l'ip d'un membre qui na pas respecter la charte du site cela est-il possible mer Affichage aléatoire de plusieurs images simultanément [ par drmicro ] Bonjour. Pour le site d'une association qui dispose de plusieurs sponsors, je souhaite afficher entre les balises &lt;marquee&gt; et &lt;/marquee&gt; Envoi mail() php simultanément [ par rockclimber ] Je m'explique : Plusieurs clients sur mon site font une action qui engendre un envoi de mail simultan&#233;. Seulement, un seul mail est g&#233;n&#233


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,248 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales