![>](style_images/1/nav_m.gif)
Forum TourDeJeu · Règles du forum |
![]() ![]() ![]() |
Bienvenue invité ( Connexion | Inscription ) | Recevoir à nouveau l'email de validation |
![]() ![]() ![]() |
Sinclair |
![]() |
![]() Pro ![]() Groupe : Membre Messages : 133 ![]() |
Salut !
Comme le nombre de joueur augmente et que je vais bientot devoir faire tourner 3 parties de 20 joueurs chacune, il faut absolument que je mette en place une résolution automatique des tours. Tout d'abord, je dois lancer une page php de mon site via webcron, et je me dis qu'il ne faut surtout pas que la page soit connue par une personne mal intentionnée car elle pourrait faire tourner X tours d'affilés ce qui détruirait la partie. Quel genre de protection puis-je mettre en place ? (Mon jeu tourne actuellement au rythme d'un tour ar semaine) D'autre part, comme je continue à programmer, je ne suis pas à l'abris d'un bug, et si la résolution du tour plante au milieu, je vais être en galère car la moitié des actions auront étée traitée (base mise à jour) et ça va être infernal de rétablir tout ça. Connaissez-vous une méthode pour s'en prémunir ? Je pourais faire touner le tour sur une copie de la base et si ça se passe bien le script automatique ferait tourner la partie sur la vrai base ? Ca va être très lourd à mettre en place ça ![]() -------------------- Concepteur/Développeur de guildes.jpc.free.fr
|
chacal3 |
Ecrit le : Jeudi 28 Avril 2005 à 19h48
|
![]() Ouf ![]() Groupe : Membre Messages : 296 ![]() |
Par exemple (entre autre) : Login + mot de passe à valider sur ta page pour être sur qu'il n'y a que toi qui puisse "valider" l'action.
Et au cas ou tu te ferais mettre par un bidouilleur, met une Variable temporel dans la bdd (ou ailleurs) ! Style : minimum 6 jours 20 heures entre 2 tours. Au pire, le vilain méchant pourra au mieux te faire tourner le tour 4 heure à l'avance et seulement 1 fois par semaine. Il te rendrais PRESQUE service sur le coup ! ![]() -------------------- Vous pouvez m'appeler MAAAÎTRE, je ne me vexerai pas... :)
|
Haiken |
Ecrit le : Jeudi 28 Avril 2005 à 21h23
|
![]() Ouf ![]() Groupe : Membre Messages : 360 ![]() |
Pour le plantage en plein milieu, le mieux est sans doute d'utiliser les transactions... Mais il faut MySQL avec innoDB... et toutes tes tables au format inoodb donc.
Au niveau codage ça se résumera à rajouter un mysql_query("START TRANSACTION") au debut et un mysql_query("COMMIT") à la fin -------------------- Association Nainwak, aide & hébergement des jeux web
Le Blog de l'assoc', encore mieux que l'assoc' tomate ! |
Guest_The Fab |
Ecrit le : Jeudi 28 Avril 2005 à 23h00
|
Unregistered ![]() |
Une option (que j'utilise pour E-Sub 2) est de dumper la base de données avant la "résolution". Comme ça en cas de merde, j'avais toujours qqch sous la main pour remonter le bousin.
Pour openESub, je suis passé au transactionnel (mais sur postgreSQL) et c'est encore mieux (ceci dit, je fais toujours un dump historisé de la base...). Pour vérouiller la page PHP de "résolution" sinon, le mieux est de la protéger avec un fichier .htaccess apache pour autoriser un seul login/pass ou éventuellement une IP. Après tout dépend ou tu as ton cron. Si tu as un accès shell à la machine, c'est le top, il suffit d'autoriser que l'ip de la machine. Si tu utilises un service genre "webcron", le mieux est d'utiliser un couple login/pass que tu utilises en demandant à "webcron" de charger la page : http://user:pass@www.mondomaine.fr/maPageAdmin.php @+ et bon courage |
|
Sybler |
Ecrit le : Jeudi 28 Avril 2005 à 23h01
|
Ouf ![]() Groupe : Membre Messages : 453 ![]() |
Si tu veux tout faire sans cron job, et que tu à un flot acceptable de joueurs, tu peux faire ceci:
À chaque fois qu'une page est chargé, tu fais une requete qui vérifie à quelle date à été le dernier tour. Si le temps entre maintenant et la dernier date du tour est plus grande que l'interval des tours: Effectuer la remise, et mettre à jour la DB pour programmer le prochain tour. Édidemment, tu DOIS avoir des visiteurs qui vienne souvent sur le site, sinon le tour ne sera pas déclencher à temps. -------------------- |
Sinclair |
Ecrit le : Vendredi 29 Avril 2005 à 15h08
|
![]() Pro ![]() Groupe : Membre Messages : 133 ![]() |
Waoo ... merci pour ces infos c'est cool !
Chacal3 : Le login et le mot de passe à valider sur la page me semble bizare vu que la page va être appelée depuis une crontab. Tu parlais d'un formulaire ou d'autre chose ? Haiken : Oui ! Bonne idée ! ![]() Les transactions, c'est exactement ce qu'il me faut. Mais innoDB est obligé ? Pourquoi ne pas tout simplment utiliser les transaction avec php et mySQL comme il le montre ici ? Cher créateur d'openESub : C'est clair que le dump de base systématique me semble être une bonne sécurité. Jusqu'a maintenant je le fait à la main via phpMyAdmin, mais je ne sais pas faire un dump via php ![]() ![]() Pour la protection, tu me suggères d'utiliser : http://user:pass@www.mondomaine.fr/maPageAdmin.php c'est une syntaxe que je ne connais pas, comment je récupère les paramètres en php ? J'ai plus l'habitude de : http://www.mondomaine.fr/maPageAdmin.php?user=toto&pass=titi ![]() Sybler, c'est une méthode interessante mais comme la résolution dure un certain temps, je préfère la programmer quand y'a personne sur le site. -------------------- Concepteur/Développeur de guildes.jpc.free.fr
|
Haiken |
Ecrit le : Vendredi 29 Avril 2005 à 16h15
|
||||
![]() Ouf ![]() Groupe : Membre Messages : 360 ![]() |
Comme indiqué dans ton article, il faut InnoDB ![]()
Avec la syntaxe http://user:pass@www.mondomaine.fr/maPageAdmin.php le login et mot de passe seront transmis au niveau du protocole HTTP, et sont donc exploitables par Apache avec une restriction .htaccess Avec la syntaxe http://www.mondomaine.fr/maPageAdmin.php?user=toto&pass=titi le login et mot de passe sont transmis comme paramètres à PHP, donc c'est à toi de coder l'authentification dans ton script -------------------- Association Nainwak, aide & hébergement des jeux web
Le Blog de l'assoc', encore mieux que l'assoc' tomate ! |
||||
chacal3 |
Ecrit le : Vendredi 29 Avril 2005 à 18h45
|
||
![]() Ouf ![]() Groupe : Membre Messages : 296 ![]() |
Je pars du principe qu'on puisse faire plusieurs choses à la fois avec une seule page. 1°) lancement d'une page automatique par un site annexe (cron par exemple) 2°) lancement manuel de cette même page dans l'éventualité que le webcron en question plante (tombe en panne, problème de trafic, etc...) 3°) en cas de lancement manuel, que le webcron ne vienne pas retourner une nouvelle fois le tour 4°) que n'importe quel clampin ne vienne pas lancer la page en question. ===> Disons que ta page est www.toto/admin/tour.php Rajoute ceci dans le lien pour le cron : www.toto/admin/tour.php?login=titi&mdp=tutu Et met un formulaire (avec un login et un mdp) dans la page pour une utilisation manuelle. Comme ça, si un gars se pointe et qu'il fait :www.toto/admin/tour.php Il devra : - faire sauter ta protection primaire (.htaccess, etc...) - ET la 2e protection. (il peut avoir du bol une fois mais pas 2. Vu l'importance de faire tourner un tour, mettre 2 protections au lieu d'une n'est jamais inutile). A+ Chacal3 -------------------- Vous pouvez m'appeler MAAAÎTRE, je ne me vexerai pas... :)
|
||
Sinclair |
Ecrit le : Lundi 02 Mai 2005 à 13h31
|
||||
![]() Pro ![]() Groupe : Membre Messages : 133 ![]() |
Arf ... y'a des jours où je me mettrais des baffes ! Bon, voyons voir comment installer InnoDB ... à première vue, j'ai l'impression qu'il s'agit d'une option lors de l'installation de MySQL. Mais dans mon souvenir, je ne me souviens pas avoir installé MySQL (j'utilise easyPHP et phpMyAdmin). D'autre part, je me demande si mon FAI (free) accepte l'utilisation des tables innoDB ? A vrai dire, j'hésite un peu à me lancer la dedans vu que mes besoins de performance sont très léger, je cherchais juste un moyen de rendre plus robuste l'execution automatique des tours ![]() Sinon, merci pour vos réponses. Chacal3 ... ta méthode de sécurisation me convient trés bien ... je vais faire ça. Dernière chose ... c'est comment pour faire un dump de la base en php ? J'en ai marre du copier/coller depuis phpMyAdmin ![]() -------------------- Concepteur/Développeur de guildes.jpc.free.fr
|
||||
bibi.skuk |
Ecrit le : Lundi 02 Mai 2005 à 15h11
|
||
Pro ![]() Groupe : Membre Messages : 64 ![]() |
ça m'a l'air très complexe tout ça... tu peux aussi simplement faire un script du genre :
ou GetIp( ) est une fonction qui recupere l'IP du client qui execute la page... Comme ca, il n'y a que Webcron qui peut executer ce script... |
||
Sinclair |
Ecrit le : Lundi 02 Mai 2005 à 16h02
|
![]() Pro ![]() Groupe : Membre Messages : 133 ![]() |
hum .... voici un méthode qui me semble très rapide et très propre !
Merci bibi.skuk ![]() ... sinon, j'en profite pour répondre à ma propre question (comme ça, ça peut servir à d'autre) Y'a des scripts comme xtdump qui permettent de faire un dump d'une base de donnée en php ... voila ![]() -------------------- Concepteur/Développeur de guildes.jpc.free.fr
|
bibi.skuk |
Ecrit le : Mardi 03 Mai 2005 à 08h19
|
||
Pro ![]() Groupe : Membre Messages : 64 ![]() |
tu peux rajouter pas mal d'autres trucs par dessus, mais cela me semble quand même le plus secure... |
||
Sinclair |
![]() |
![]() Pro ![]() Groupe : Membre Messages : 133 ![]() |
ok, merci bibi.skuk
![]() Bon, faut que je m'y prenne méthodiquement. Je dois dans l'ordre : - Générer automatiquement des dumps - Tracer les résultats des tours dans des fichiers de logs - Passer la gestion des tours en automatique. Première étape : les dumps ================== Alors, j'ai installé un script nommé XTDump qui marche trés bien, l'inconvénient c'est que les fichiers créés ont le même nom, donc un dump va écraser le précédent ce qui ne me convient pas. L'idéal sera que je génère mes dump moi même, mais après lecture de mes docs favorites, je n'ai pas trouver de fonction mysql (en php) qui me permettrais d'exporter mes tables dans des fichiers du genre : dump_050504.sql Une astuce ? -------------------- Concepteur/Développeur de guildes.jpc.free.fr
|
pascaltje |
Ecrit le : Mercredi 04 Mai 2005 à 13h17
|
||
Ouf ![]() Groupe : Membre Messages : 242 ![]() |
le truc c'est de définir l'endroit où sera créé le dump (et écrasé à chaque fois) puis en plus du dump lancer un processus de copie du/des fichier/s créé/s vers un autre répertoire avec le nom qui va bien, du genre: dump_050504.sql A+ Pascal -------------------- |
||
Sinclair |
Ecrit le : Mercredi 04 Mai 2005 à 13h30
|
![]() Pro ![]() Groupe : Membre Messages : 133 ![]() |
ouaip .... bonne idée !
![]() Si je comprend bien, il me reste plus qu'a mettre un deuxième script en crontab (10 minutes après le premier) qui copira mon dump avec un nom à moi. Nikel ! ... je m'y met de suite ... Merci pascaltje -------------------- Concepteur/Développeur de guildes.jpc.free.fr
|
![]() ![]() ![]() |