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

Arto_8000 Messages postés 1044 Date d'inscription lundi 7 mars 2005 Statut Membre Dernière intervention 13 juillet 2010 - 22 mai 2009 à 01:21
Arto_8000 Messages postés 1044 Date d'inscription lundi 7 mars 2005 Statut Membre Dernière intervention 13 juillet 2010 - 25 mai 2009 à 20:19
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/50050-gerer-les-problemes-d-acces-concurents-sur-certaines-pages-ou-zones-d-un-site

Arto_8000 Messages postés 1044 Date d'inscription lundi 7 mars 2005 Statut Membre Dernière intervention 13 juillet 2010 7
25 mai 2009 à 20:19
"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.
sixtyfourwarrior Messages postés 2 Date d'inscription lundi 4 juillet 2005 Statut Membre Dernière intervention 25 mai 2009
25 mai 2009 à 19:35
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. :)
Arto_8000 Messages postés 1044 Date d'inscription lundi 7 mars 2005 Statut Membre Dernière intervention 13 juillet 2010 7
22 mai 2009 à 18: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.
sixtyfourwarrior Messages postés 2 Date d'inscription lundi 4 juillet 2005 Statut Membre Dernière intervention 25 mai 2009
22 mai 2009 à 13:38
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 ! :)
Arto_8000 Messages postés 1044 Date d'inscription lundi 7 mars 2005 Statut Membre Dernière intervention 13 juillet 2010 7
22 mai 2009 à 01:21
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.
Rejoignez-nous